この記事では、Azure Red Hat OpenShift クラスターでクラスター全体のプロキシを有効にするプロセスについて説明します。 この機能により、運用環境はインターネットへの直接アクセスを拒否し、代わりに HTTP または HTTPS プロキシを使用できます。 この記事では、Azure Red Hat OpenShift クラスターに必要な特定の構成手順について詳しく説明します。 OpenShift Container Platform のクラスター全体のプロキシ機能のしくみの詳細については、 Red Hat のドキュメントを参照してください。
クラスター全体のプロキシを構成する場合は、次の影響を理解することが重要です。
- ノードの再起動: プロキシを有効にすると、クラスターの更新と同様に、ローリング形式でノードが再起動します。 これは、新しいマシン構成を適用するため必要です。
-
サービスの中断: このプロセス中にサービスの中断を回避するには、説明に従って
noProxy
リストを準備することが重要です。
重要
この記事で説明されている手順に従わないと、クラスター ネットワーク トラフィックのルーティングが不適切になる可能性があります。 これにより、イメージプルエラーなどのワークロードの問題が発生する可能性があります。
クラスター全体のプロキシ構成のスコープ
- OpenShift ワークロード: この記事の手順は、OpenShift ワークロードにのみ適用されます。 アプリケーション ワークロードのプロキシ処理は、この記事の範囲外です。
- OpenShift Container Platform のバージョン: クラスター全体のプロキシは、 Azure Red Hat OpenShift サポート ポリシーで概説されている OpenShift Container Platform バージョンでサポートされています。
この記事の手順に従い、 noProxy
一覧を準備すると、中断が最小限に抑え、プロキシを有効にするときにスムーズに移行できるようになります。
前提条件と免責事項
- 詳細については、 クラスター全体のプロキシの構成に関する OpenShift のドキュメントを参照してください。
- プロキシ サーバーと証明書: プロキシ サーバーと証明書が既に配置されている必要があります。
- Azure Red Hat OpenShift SRE では、プロキシ サーバーまたは証明書がサポートされていません。
概要
-
noProxy
一覧で使用するために必要なエンドポイント値を収集します。 -
noProxy
の収集されたデータを使用して、クラスター全体のプロキシを有効にします。 -
noProxy
リストとクラスター全体のプロキシが正常に構成されたことを確認します。
に必要なデータを収集します。 noProxy
次のコマンドを実行して、クラスター全体のプロキシの状態を確認します。
oc get proxy cluster -o yaml
spec
フィールドとstatus
フィールドが空で、有効になっていないことを示す必要があります。 空でない場合は、以前に構成されている可能性があります。apiVersion: config.openshift.io/v1 kind: Proxy metadata: creationTimestamp: "xxxx-xx-xxTxx:xx:xxZ" generation: name: cluster resourceVersion: uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx spec: trustedCA: name: "" status: {}
IMDS IP をメモします。
169.254.169.254
カスタム DNS を使用していない場合は、Azure DNS IP に注意してください。
168.63.129.16
localhost ドメインとサービス ドメインに注意してください。
localhost
127.0.0.1
.svc
.cluster.local
次のコマンドを実行して、
gatewayDomains
を取得します。oc get cluster cluster -o jsonpath='{.spec.gatewayDomains}'
次の出力例を参照してください。
[ "agentimagestorews01.blob.core.windows.net", "agentimagestorecus01.blob.core.windows.net", "agentimagestoreeus01.blob.core.windows.net", "agentimagestoreeus01.blob.core.windows.net", "agentimagestoreeas01.blob.core.windows.net", "eastus-shared.prod.warm.ingest.monitor.core.windows.net", "...", // Many other endpoints ]
クラスター ドメインの URL を取得します。
API とアプリケーション ドメインのクラスター固有の URL を作成します。
ある。 次のコマンドを実行して、アプリケーション ドメインを取得します。
az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "consoleProfile.url" -o tsv
次の出力例を参照してください。
https://console-openshift-console.apps.xxxxxxxx.westus2.aroapp.io/
noProxy
リストで使用する.apps.xxxxxxxx
で始まるパーツのみを保持します。 末尾の "/" は含めないでください。次の例を参照してください。
.apps.xxxxxxxx.westus2.aroapp.io
b。 API ドメインを取得します。
前のコマンドの出力を使用して、
.apps
をapi
に置き換え、URL にapi-int
して、noProxy
リストの API ドメインを取得します。次の例を参照してください。
api.xxxxxxxx.westus2.aroapp.io api-int.xxxxxxxx.westus2.aroapp.io
CIDR 範囲を取得します。
ある。 次のコマンドを実行して、ワーカー プロファイル サブネットから
addressPrefix
を取得します。SUBNET_ID=$(az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "workerProfiles[].subnetId" -o tsv) az network vnet subnet show --ids "$SUBNET_ID" --query "addressPrefix || [].addressPrefix" -o tsv
出力例:
10.0.1.0/24
b。 次のコマンドを実行して、マスター プロファイル サブネットから
addressPrefix
を取得します。SUBNET_ID=$(az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "masterProfile.subnetId" -o tsv) az network vnet subnet show --ids "$SUBNET_ID" --query "addressPrefix" -o tsv
出力例:
10.0.0.0/24
c. 次のコマンドを実行して、
podCidr
を取得します。az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "networkProfile.podCidr" -o tsv
出力例:
10.128.0.0/14
d. 次のコマンドを実行して、
serviceCidr
を取得します。az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "networkProfile.serviceCidr" -o tsv
出力例:
172.30.0.0/16
収集したデータを
noProxy
リストに結合します。これは、次のセクションでプロキシ クラスター オブジェクトを更新するために使用されます。
クラスター全体のプロキシの有効化
openshift-config
名前空間にuser-ca-bundle
configmap を作成して、正しい証明書を使用します。ある。 次の内容で
user-ca-bundle.yaml
という名前のファイルを作成し、PEM でエンコードされた証明書の値を指定します。apiVersion: v1 data: ca-bundle.crt: | <MY_PEM_ENCODED_CERTS> kind: ConfigMap metadata: name: user-ca-bundle namespace: openshift-config
-
data.ca-bundle.crt
: このデータ キーには ca-bundle.crt という名前を付ける必要があります。 -
data.ca-bundle.crt | <MY_PEM_ENCODED_CERTS>
: プロキシの ID 証明書に署名するために使用される 1 つ以上の PEM エンコード X.509 証明書。 -
metadata.name
: プロキシ オブジェクトから参照される構成マップ名。 -
metadata.namespace
: 構成マップは、openshift-config
名前空間に存在する必要があります。
b。 次のコマンドを実行して ConfigMap を作成します。
oc create -f user-ca-bundle.yaml
c. 次のコマンドを実行して、
user-ca-bundle
ConfigMap の作成を確認します。oc get cm -n openshift-config user-ca-bundle -o yaml
次の出力例を参照してください。
apiVersion: v1 data: ca-bundle.crt: | -----BEGIN CERTIFICATE----- <CERTIFICATE_DATA> -----END CERTIFICATE----- kind: ConfigMap metadata: creationTimestamp: "xxxx-xx-xxTxx:xx:xxZ" name: user-ca-bundle namespace: openshift-config resourceVersion: "xxxxxx" uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
-
oc edit
を使用してプロキシ クラスター オブジェクトを更新し、以前に収集した情報を使用してプロキシ オブジェクトを構成します。ある。 次のコマンドを実行します。
oc edit proxy/cluster
次のフィールドを更新または追加します。
-
spec.httpProxy
: クラスターの外部で HTTP 接続を作成するために使用するプロキシ URL。 URL スキームはhttp
である必要があります。 -
spec.httpsProxy
: クラスターの外部で HTTPS 接続を作成するために使用するプロキシ URL。 -
spec.noProxy
: これは、上記の noProxy 手順に必要なデータの収集 で取得したエンドポイントのコンマ区切りの一覧です。 -
spec.trustedCA
: HTTPS 接続のプロキシに必要な他の CA 証明書を含む、openshift-config
名前空間内の構成マップへの参照。 ここで参照する前に、構成マップが既に存在している必要があることに注意してください。 この場合、これは上で作成された構成マップの名前です。これは user-ca-bundle です。
b。 次のコマンドを実行して、構成を確認します。
oc get proxy cluster -o yaml
次の出力例を参照してください。
apiVersion: config.openshift.io/v1 kind: Proxy metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"config.openshift.io/v1","kind":"Proxy","metadata":{"annotations":{},"name":"cluster"},"spec":{"httpProxy":"http://10.0.0.15:3128","httpsProxy":"https://10.0.0.15:3129","noProxy":"agentimagestorecus01.blob.core.windows.net,agentimagestoreeus01.blob.core.windows.net,agentimagestorewus01.blob.core.windows.net,agentimagestoreweu01.blob.core.windows.net,agentimagestoreeas01.blob.core.windows.net,australiaeast-shared.prod.warm.ingest.monitor.core.windows.net,gcs.prod.monitoring.core.windows.net,gsm1130809042eh.servicebus.windows.net,gsm1130809042xt.blob.core.windows.net,gsm119650579eh.servicebus.windows.net,gsm119650579xt.blob.core.windows.net,gsm810972145eh.servicebus.windows.net,gsm810972145xt.blob.core.windows.net,maupdateaccount.blob.core.windows.net,maupdateaccount2.blob.core.windows.net,maupdateaccount3.blob.core.windows.net,maupdateaccount4.blob.core.windows.net,production.diagnostics.monitoring.core.windows.net,qos.prod.warm.ingest.monitor.core.windows.net,login.microsoftonline.com,management.azure.com,arosvc.azurecr.io,arosvc.australiaeast.data.azurecr.io,imageregistryvmxx7.blob.core.windows.net,.cluster.local,.svc,api-int.vlsi41ah.australiaeast.aroapp.io,localhost,10.0.0.0/8","trustedCA":{"name":"user-ca-bundle"}}} creationTimestamp: "xxxx-xx-xxTxx:xx:xxZ" generation: 17 name: cluster resourceVersion: "xxxxxxx" uid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx spec: httpProxy: http://10.0.0.15:3128 httpsProxy: https://10.0.0.15:3129 noProxy: agentimagestorecus01.blob.core.windows.net,agentimagestoreeus01.blob.core.windows.net,agentimagestorewus01.blob.core.windows.net,agentimagestoreweu01.blob.core.windows.net,agentimagestoreeas01.blob.core.windows.net,australiaeast-shared.prod.warm.ingest.monitor.core.windows.net,gcs.prod.monitoring.core.windows.net,gsm1130809042eh.servicebus.windows.net,gsm1130809042xt.blob.core.windows.net,gsm119650579eh.servicebus.windows.net,gsm119650579xt.blob.core.windows.net,gsm810972145eh.servicebus.windows.net,gsm810972145xt.blob.core.windows.net,maupdateaccount.blob.core.windows.net,maupdateaccount2.blob.core.windows.net,maupdateaccount3.blob.core.windows.net,maupdateaccount4.blob.core.windows.net,production.diagnostics.monitoring.core.windows.net,qos.prod.warm.ingest.monitor.core.windows.net,login.microsoftonline.com,management.azure.com,arosvc.azurecr.io,arosvc.australiaeast.data.azurecr.io,imageregistryvmxx7.blob.core.windows.net,.cluster.local,.svc,api-int.vlsi41ah.australiaeast.aroapp.io,localhost,10.0.0.0/8 trustedCA: name: user-ca-bundle status: httpProxy: http://10.0.0.15:3128 httpsProxy: https://10.0.0.15:3129 noProxy: .cluster.local,.svc,10.0.0.0/8,10.128.0.0/14,127.0.0.0/8,127.0.0.1,169.254.169.254,172.30.0.0/16,agentimagestorecus01.blob.core.windows.net,agentimagestoreeas01.blob.core.windows.net,agentimagestoreeus01.blob.core.windows.net,agentimagestoreweu01.blob.core.windows.net,agentimagestorewus01.blob.core.windows.net,api-int.vlsi41ah.australiaeast.aroapp.io,arosvc.australiaeast.data.azurecr.io,arosvc.azurecr.io,australiaeast-shared.prod.warm.ingest.monitor.core.windows.net,gcs.prod.monitoring.core.windows.net,gsm1130809042eh.servicebus.windows.net,gsm1130809042xt.blob.core.windows.net,gsm119650579eh.servicebus.windows.net,gsm119650579xt.blob.core.windows.net,gsm810972145eh.servicebus.windows.net,gsm810972145xt.blob.core.windows.net,imageregistryvmxx7.blob.core.windows.net,localhost,login.microsoftonline.com,management.azure.com,maupdateaccount.blob.core.windows.net,maupdateaccount2.blob.core.windows.net,maupdateaccount3.blob.core.windows.net,maupdateaccount4.blob.core.windows.net,production.diagnostics.monitoring.core.windows.net,qos.prod.warm.ingest.monitor.core.windows.net
-
新しいマシン構成がすべてのノードにロールアウトされ、クラスターオペレーターが正常な状態を報告するまで待ちます。
ある。 次のコマンドを実行して、ノードの正常性を確認します。
oc get nodes
次の出力例を参照してください。
NAME STATUS ROLES AGE VERSION mycluster-master-0 Ready master 10d v1.xx.xx+xxxxxxx mycluster-master-1 Ready master 10d v1.xx.xx+xxxxxxx mycluster-master-2 Ready master 10d v1.xx.xx+xxxxxxx mycluster-worker-australiaeast1-mvzqr Ready worker 10d v1.xx.xx+xxxxxxx mycluster-worker-australiaeast2-l9fgj Ready worker 10d v1.xx.xx+xxxxxxx mycluster-worker-australiaeast3-pz9rw Ready worker 10d v1.xx.xx+xxxxxxx
b。 次のコマンドを実行して、クラスター オペレーターの正常性を確認します。
oc get co
次の出力例を参照してください。
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE aro vxxxxxxxx True False False 10d authentication 4.xx.xx True False False 8m25s cloud-controller-manager 4.xx.xx True False False 10d cloud-credential 4.xx.xx True False False 10d cluster-autoscaler 4.xx.xx True False False 10d ... (Many other components) ... storage 4.xx.xx True False False 10d
注
user-ca-bundle
が必要な場合は、次のディレクトリにあります (ただし、このプロセスでは必要ありません)。/etc/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt
noProxy
構成を確認する
プロキシ構成を確認するには、クラスターオペレーターの正常性状態を確認します。
noProxy
フィールドが正しく構成されていない場合、複数のクラスターオペレーターがDegraded: True
状態になる可能性があります。 これは、 ImagePullBack
エラー、無効な証明書、一般的な接続の問題など、さまざまな問題が原因で発生する可能性があります。 また、一部の演算子は、基になる原因が似ているため、 Progressing: True
状態のままになることがあります。
次のコマンドを実行して、クラスターオペレーターの状態を確認します。
oc get co
出力の解釈 (正常な状態):
noProxy
フィールドが 正しく構成されている場合、出力は次の例のようになります。NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE aro vxxxxxxxx.xx True False False 15d authentication 4.xx.xx True False False 15d cloud-controller-manager 4.xx.xx True False False 15d cloud-credential 4.xx.xx True False False 15d
注
クラスター演算子の数と種類は異なる場合があります。 次に示す切り捨てられた例は、ARO でサポートされる演算子の正常な状態を示すために提供されています。
出力の解釈 (正しく構成されていません):
noProxy
フィールドが 正しく構成されていない場合、出力は次の例のようになります。NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE aro vxxxxxxxx.xx True False False 45h authentication 4.xx.xx False True True 24h OAuthServerRouteEndpointAccessibleControllerAvailable: Get "https://oauth-openshift.apps.mm6osebam6b03b9df3.eastus2euap.aroapp.io/healthz": Not Found control-plane-machine-set 4.xx.xx True False False 46h SyncLoopRefreshProgressing: Working toward version 4.15.35, 1 replicas available image-registry 4.xx.xx True True False 45h NodeCADaemonProgressing: The daemon set node-ca is deployed Progressing: The deployment has not completed ingress 4.xx.xx True True True 83m The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing) machine-config 4.xx.xx False False True 43h Cluster not available for [{operator 4.15.35}]: error during waitForControllerConfigToBeCompleted: [context deadline exceeded, controllerconfig is not completed: status for ControllerConfig machine-config-controller is being reported for 6, expecting it for 13] storage 4.xx.xx True True False 45h AzureFileCSIDriverOperatorCRProgressing: AzureFileDriverControllerServiceControllerProgressing: Waiting for Deployment to deploy pods AzureFileCSIDriverOperatorCRProgressing: AzureFileDriverNodeServiceControllerProgressing: Waiting for DaemonSet to deploy node pods
注
表示されるのは、切り捨てられたサンプル出力のみです。 また、他のクラスターオペレーターは、
noProxy
の構成ミスによって異なるエラーが発生したDegraded: True
状態を報告する場合もあります。
クラスター全体のプロキシを削除する
クラスター全体のプロキシを削除する方法については、 Red Hat OpenShift のドキュメントを参照してください。