次の方法で共有


Azure Red Hat OpenShift (ARO) クラスターでクラスター全体のプロキシを構成する

この記事では、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 では、プロキシ サーバーまたは証明書がサポートされていません。

概要

  1. noProxy一覧で使用するために必要なエンドポイント値を収集します。
  2. noProxyの収集されたデータを使用して、クラスター全体のプロキシを有効にします。
  3. noProxyリストとクラスター全体のプロキシが正常に構成されたことを確認します。

に必要なデータを収集します。 noProxy

  1. 次のコマンドを実行して、クラスター全体のプロキシの状態を確認します。

    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: {}
    
  2. IMDS IP をメモします。 169.254.169.254

  3. カスタム DNS を使用していない場合は、Azure DNS IP に注意してください。 168.63.129.16

  4. localhost ドメインとサービス ドメインに注意してください。

    • localhost
    • 127.0.0.1
    • .svc
    • .cluster.local
  5. 次のコマンドを実行して、 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
    ]
    
  6. クラスター ドメインの 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 ドメインを取得します。

    前のコマンドの出力を使用して、 .appsapi に置き換え、URL に api-int して、 noProxy リストの API ドメインを取得します。

    次の例を参照してください。

    api.xxxxxxxx.westus2.aroapp.io
    api-int.xxxxxxxx.westus2.aroapp.io
    
  7. 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
    
  8. 収集したデータを noProxy リストに結合します。これは、次のセクションでプロキシ クラスター オブジェクトを更新するために使用されます。

クラスター全体のプロキシの有効化

  1. 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
    
  2. 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
    
  3. 新しいマシン構成がすべてのノードにロールアウトされ、クラスターオペレーターが正常な状態を報告するまで待ちます。

    ある。 次のコマンドを実行して、ノードの正常性を確認します。

    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 状態のままになることがあります。

  1. 次のコマンドを実行して、クラスターオペレーターの状態を確認します。

    oc get co
    
  2. 出力の解釈 (正常な状態): 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 でサポートされる演算子の正常な状態を示すために提供されています。

  3. 出力の解釈 (正しく構成されていません): 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 のドキュメントを参照してください