Dela via


Konfigurera en klusteromfattande proxy i ett Azure Red Hat OpenShift-kluster

Den här artikeln beskriver processen för att aktivera en klusteromfattande proxy i ett Azure Red Hat OpenShift-kluster. Med den här funktionen kan produktionsmiljöer neka direkt åtkomst till Internet och i stället ha en HTTP- eller HTTPS-proxy tillgänglig. Den här artikeln beskriver de specifika konfigurationssteg som krävs för ett Azure Red Hat OpenShift-kluster. Mer information om hur den klusteromfattande proxyfunktionen fungerar för OpenShift Container Platform finns i Red Hat-dokumentationen.

När du konfigurerar en klusteromfattande proxy är det viktigt att förstå följande effekter:

  • Omstart av nod: Om proxyn aktiveras startas noderna om på ett löpande sätt, ungefär som en klusteruppdatering. Detta är nödvändigt eftersom det tillämpar nya datorkonfigurationer.
  • Tjänststörningar: För att undvika avbrott i tjänsten under den här processen är det viktigt att förbereda listan enligt beskrivningen noProxy .

Viktigt!

Om du inte följer anvisningarna i den här artikeln kan det leda till felaktig routning av klusternätverkstrafik. Detta kan leda till problem med arbetsbelastning, till exempel fel vid bildhämtning.

Omfång för klusteromfattande proxykonfiguration

  • OpenShift-arbetsbelastningar: Anvisningarna i den här artikeln gäller endast för OpenShift-arbetsbelastningar. Proxyprogramarbetsbelastningar ligger utanför omfånget för den här artikeln.
  • OpenShift Container Platform-versioner: Klusteromfattande proxy stöds i OpenShift Container Platform-versioner som beskrivs i Azure Red Hat OpenShift-supportprincipen.

Om du följer anvisningarna i den här artikeln och förbereder noProxy listan minimeras störningarna och en smidig övergång säkerställs när proxyn aktiveras.

Krav och ansvarsfriskrivning

Översikt

  1. Samla in de slutpunktsvärden som krävs för användning i noProxy listan.
  2. Aktivera den klusteromfattande proxyn med hjälp av insamlade data för noProxy.
  3. Kontrollera att noProxy listan och den klusteromfattande proxyn har konfigurerats.

Samla in nödvändiga data för noProxy

  1. Kontrollera proxystatusen för hela klustret genom att köra följande kommando:

    oc get proxy cluster -o yaml
    

    Fälten spec och status bör vara tomma, vilket visar att det inte är aktiverat. Om den inte är tom kan den ha konfigurerats tidigare.

    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. Observera IMDS IP: 169.254.169.254

  3. Om du inte använder anpassad DNS noterar du Azure DNS-IP:en: 168.63.129.16

  4. Observera localhost- och tjänstdomänerna:

    • localhost
    • 127.0.0.1
    • .svc
    • .cluster.local
  5. Hämta gatewayDomains genom att köra följande kommando:

    oc get cluster cluster -o jsonpath='{.spec.gatewayDomains}'
    

    Se följande exempelutdata:

    [
        "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. Hämta url:er för klusterdomänen.

    Skapa klusterspecifika URL:er för API:et och programdomänerna.

    a. Hämta programdomänen genom att köra följande kommando:

    az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "consoleProfile.url" -o tsv
    

    Se följande exempelutdata:

    https://console-openshift-console.apps.xxxxxxxx.westus2.aroapp.io/
    

    Behåll endast delen som börjar med .apps.xxxxxxxx för användning i listan noProxy . Ta inte med avslutande "/".

    Se följande exempel:

    .apps.xxxxxxxx.westus2.aroapp.io
    

    b) Hämta API-domänerna.

    Använd utdata från föregående kommando och ersätt .apps med api och api-int i URL:en för att hämta API-domänerna för noProxy listan.

    Se följande exempel:

    api.xxxxxxxx.westus2.aroapp.io
    api-int.xxxxxxxx.westus2.aroapp.io
    
  7. Hämta CIDR-intervallen.

    a. Hämta addressPrefix från arbetarprofilens undernät genom att köra följande kommando:

    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
    

    Exempel på utdata:

    10.0.1.0/24
    

    b) Hämta addressPrefix från huvudprofilens undernät genom att köra följande kommando:

    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
    

    Exempel på utdata:

    10.0.0.0/24
    

    c. Hämta podCidr genom att köra följande kommando:

    az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "networkProfile.podCidr" -o tsv
    

    Exempel på utdata:

    10.128.0.0/14
    

    d. Hämta serviceCidr genom att köra följande kommando:

    az aro show -n <CLUSTER_NAME> -g <RESOURCE_GROUP_NAME> --query "networkProfile.serviceCidr" -o tsv
    

    Exempel på utdata:

    172.30.0.0/16
    
  8. Kombinera insamlade data i listan noProxy som ska användas för att uppdatera proxyklusterobjektet i nästa avsnitt.

Aktivera klusteromfattande proxy

  1. Skapa ConfigMap user-ca-bundle i namnområdet openshift-config så att rätt certifikat används.

    a. Skapa en fil user-ca-bundle.yaml med namnet med följande innehåll och ange värdena för dina PEM-kodade certifikat:

    apiVersion: v1
    data:
      ca-bundle.crt: |
        <MY_PEM_ENCODED_CERTS>
    kind: ConfigMap
    metadata:
      name: user-ca-bundle
      namespace: openshift-config
    
    • data.ca-bundle.crt: Den här datanyckeln måste ha namnet ca-bundle.crt.
    • data.ca-bundle.crt | <MY_PEM_ENCODED_CERTS>: Ett eller flera PEM-kodade X.509-certifikat som används för att signera proxyns identitetscertifikat.
    • metadata.name: Namnet på konfigurationskartan som refereras från proxyobjektet.
    • metadata.namespace: Konfigurationskartan måste finnas i openshift-config namnområdet.

    b) Skapa ConfigMap genom att köra följande kommando:

    oc create -f user-ca-bundle.yaml
    

    c. Bekräfta skapandet av user-ca-bundle ConfigMap genom att köra följande kommando:

    oc get cm -n openshift-config user-ca-bundle -o yaml
    

    Se följande exempelutdata:

    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. Uppdatera proxyklusterobjektet med hjälp av oc editoch konfigurera sedan proxyobjektet med hjälp av den tidigare insamlade informationen.

    a. Kör följande kommando:

    oc edit proxy/cluster
    

    Uppdatera eller lägg till följande fält:

    • spec.httpProxy: En proxy-URL som ska användas för att skapa HTTP-anslutningar utanför klustret. URL-schemat måste vara http.
    • spec.httpsProxy: En proxy-URL som ska användas för att skapa HTTPS-anslutningar utanför klustret.
    • spec.noProxy: Det här är kommaavgränsad lista över slutpunkter som hämtas i stegen Samla in nödvändiga data för noProxy ovan.
    • spec.trustedCA: En referens till konfigurationskartan i namnområdet openshift-config som innehåller andra CA-certifikat som krävs för proxykörning av HTTPS-anslutningar. Observera att konfigurationskartan redan måste finnas innan du refererar till den här. I det här fallet är detta namnet på konfigurationskartan som skapades ovan, vilket är user-ca-bundle.

    b) Bekräfta konfigurationen genom att köra följande kommando:

    oc get proxy cluster -o yaml
    

    Se följande exempelutdata:

    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. Vänta tills den nya maskinkonfigurationen distribueras till alla noder och klusteroperatorerna rapporterar att allt är felfritt.

    a. Bekräfta nodhälsa genom att köra följande kommando:

    oc get nodes
    

    Se följande exempelutdata:

    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) Bekräfta klusteroperatorns hälsa genom att köra följande kommando:

    oc get co
    

    Se följande exempelutdata:

    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
    

    Anmärkning

    Om du behöver user-ca-bundlefinns den i följande katalog (men det krävs inte för den här processen):

    /etc/pki/ca-trust/source/anchors/openshift-config-user-ca-bundle.crt

Verifiera noProxy konfigurationen

Kontrollera proxykonfigurationen genom att kontrollera hälsotillståndet för klusteroperatorerna. Om fältet noProxy är felkonfigurerat kan flera klusteroperatorer ange ett Degraded: True tillstånd. Detta kan bero på olika problem, inklusive, men inte begränsat till, ImagePullBack fel, ogiltiga certifikat eller allmänna anslutningsproblem. Dessutom kan vissa operatorer förbli i ett Progressing: True tillstånd på grund av liknande underliggande orsaker.

  1. Kontrollera statusen för klusteroperatorerna genom att köra följande kommando:

    oc get co
    
  2. Tolka utdata (felfritt tillstånd): Om fältet noProxy är korrekt konfigurerat bör utdata likna följande exempel:

    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
    

    Anmärkning

    Antalet och typen av klusteroperatorer kan variera. Det trunkerade exemplet som visas är tillhandahållet för att illustrera ett välfungerande tillstånd för stödda operatörer.

  3. Tolka utdata (felkonfigurerad): Om fältet noProxy är felkonfigurerat kan utdata likna följande exempel:

    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
    

    Anmärkning

    Det visas bara ett förkortat exempel på utdata. Andra klusteroperatorer kan också rapportera ett Degraded: True tillstånd med olika fel till följd av felkonfigurationen av noProxy.

Ta bort klusteromfattande proxy

Information om hur du tar bort den klusteromfattande proxyn finns i Red Hat OpenShift-dokumentationen.