Sdílet prostřednictvím


Povolení podpory více oborů názvů v clusteru AKS s kontrolerem příchozího přenosu dat služby Application Gateway

Motivace

Obory názvů Kubernetes umožňují rozdělit cluster Kubernetes a přidělit je do podskupin většího týmu. Tyto podtýmy pak můžou nasazovat a spravovat infrastrukturu s jemnými kontrolami prostředků, zabezpečení, konfigurace atd. Kubernetes umožňuje definovat jeden nebo více prostředků příchozího přenosu dat nezávisle v rámci každého oboru názvů.

Od verze 0.7 Aplikace Azure Gateway Kubernetes IngressController (AGIC) může ingestovat události z více oborů názvů a sledovat je. Pokud se správce AKS rozhodne službu Application Gateway používat jako příchozí přenos dat, všechny obory názvů používají stejnou instanci služby Application Gateway. Jedna instalace kontroleru příchozího přenosu dat monitoruje přístupné obory názvů a konfiguruje službu Application Gateway, ke které je přidružená.

Verze 0.7 AGIC nadále sleduje default výhradně obor názvů, pokud se explicitně nezmění na jeden nebo více různých oborů názvů v konfiguraci Helm. Podívejte se na následující část.

Tip

Podívejte se také na téma Co je Application Gateway pro kontejnery.

Povolení podpory více oborů názvů

Povolení podpory více oborů názvů:

  1. upravte soubor helm-config.yaml jedním z následujících způsobů:
    • watchNamespace zcela odstranit klíč z helm-config.yaml - AGIC sleduje všechny obory názvů
    • nastavit watchNamespace na prázdný řetězec – AGIC sleduje všechny obory názvů.
    • přidání více oborů názvů oddělených čárkou (watchNamespace: default,secondNamespace) – AGIC sleduje tyto obory názvů výhradně.
  2. Použít změny šablony Helm pomocí: helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azure

Po nasazení s možností sledovat více oborů názvů provede AGIC následující akce:

  • zobrazí seznam prostředků příchozího přenosu dat ze všech přístupných oborů názvů.
  • filtry pro prostředky příchozího přenosu dat s poznámkami kubernetes.io/ingress.class: azure/application-gateway
  • kompozes combined Application Gateway config
  • použije konfiguraci pro přidruženou službu Application Gateway prostřednictvím ARM.

Konfliktní konfigurace

Několik prostředků příchozího přenosu dat s oborem názvů může AGIC instruovat, aby vytvořil konfliktní konfigurace pro jednu službu Application Gateway. (Dva příchozí přenosy dat deklarující stejnou doménu například.)

V horní části hierarchie je možné vytvořit a sdílet naslouchací procesy (IP adresa, port a hostitel) a pravidla směrování (naslouchací proces vazby, back-endový fond a nastavení HTTP) pomocí několika oborů názvů nebo příchozích přenosů dat.

Na druhou stranu – cesty, back-endové fondy, nastavení HTTP a certifikáty TLS je možné vytvořit pouze jedním oborem názvů a duplikáty se odeberou.

Představte si například následující duplicitní prostředky příchozího přenosu dat definované obory staging názvů a production pro www.contoso.com:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: websocket-ingress
  namespace: staging
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
    - host: www.contoso.com
      http:
        paths:
          - backend:
              serviceName: web-service
              servicePort: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: websocket-ingress
  namespace: production
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
    - host: www.contoso.com
      http:
        paths:
          - backend:
              serviceName: web-service
              servicePort: 80

Přes dva prostředky příchozího přenosu dat náročné na směrování provozu www.contoso.com do příslušných oborů názvů Kubernetes může provoz obsluhovat pouze jeden back-end. AGIC vytvoří konfiguraci založenou na základu "první in, first out" pro jeden z prostředků. Pokud se současně vytvoří dva prostředky příchozího přenosu dat, bude mít přednost ten, který je dříve v abecedě. Na základě této vlastnosti se pro příchozí přenos dat vytvoří production nastavení. Služba Application Gateway je nakonfigurovaná s následujícími prostředky:

  • Posluchače: fl-www.contoso.com-80
  • Pravidlo směrování: rr-www.contoso.com-80
  • Back-endový fond: pool-production-contoso-web-service-80-bp-80
  • Nastavení HTTP:bp-production-contoso-web-service-80-80-websocket-ingress
  • Sonda stavu: pb-production-contoso-web-service-80-websocket-ingress

Poznámka:

Kromě naslouchacího procesu a pravidla směrování zahrnují vytvořené prostředky služby Application Gateway název oboru názvů (production), pro který byly vytvořeny.

Pokud se tyto dva prostředky příchozího přenosu dat zavádějí do clusteru AKS v různých bodech v čase, je pravděpodobné, že AGIC skončí ve scénáři, ve kterém rekonfiguruje službu Application Gateway a směruje provoz z namespace-B do namespace-A.

Pokud jste například přidali první, staging AGIC nakonfiguruje službu Application Gateway tak, aby směruje provoz do přípravného back-endového fondu. V pozdější fázi zavedení production příchozího přenosu dat způsobí AGIC přeprogramování služby Application Gateway, která začne směrovat provoz do back-endového production fondu.

Omezení přístupu k oborům názvů

Ve výchozím nastavení AGIC konfiguruje Službu Application Gateway na základě poznámek příchozího přenosu dat v rámci libovolného oboru názvů. Pokud chcete toto chování omezit, máte následující možnosti:

  • omezte obory názvů explicitním definováním oborů názvů AGIC by měli sledovat prostřednictvím watchNamespace klíče YAML v helm-config.yaml.
  • Použití role nebo vazby rolí k omezení AGIC na konkrétní obory názvů

Ukázkový konfigurační soubor Helm

    # This file contains the essential configs for the ingress controller helm chart

    # Verbosity level of the App Gateway Ingress Controller
    verbosityLevel: 3
    
    ################################################################################
    # Specify which application gateway the ingress controller manages
    #
    appgw:
        subscriptionId: <subscriptionId>
        resourceGroup: <resourceGroupName>
        name: <applicationGatewayName>
    
        # Setting appgw.shared to "true" creates an AzureIngressProhibitedTarget CRD.
        # This prohibits AGIC from applying config for any host/path.
        # Use "kubectl get AzureIngressProhibitedTargets" to view and change this.
        shared: false
    
    ################################################################################
    # Specify which kubernetes namespace the ingress controller watches
    # Default value is "default"
    # Leaving this variable out or setting it to blank or empty string would
    # result in Ingress Controller observing all acessible namespaces.
    #
    # kubernetes:
    #   watchNamespace: <namespace>
    
    ################################################################################
    # Specify the authentication with Azure Resource Manager
    #
    # Two authentication methods are available:
    # - Option 1: AAD-Pod-Identity (https://github.com/Azure/aad-pod-identity)
    armAuth:
        type: aadPodIdentity
        identityResourceID: <identityResourceId>
        identityClientID:  <identityClientId>
    
    ## Alternatively you can use Service Principal credentials
    # armAuth:
    #    type: servicePrincipal
    #    secretJSON: <<Generate this value with: "az ad sp create-for-rbac --subscription <subscription-uuid> --role Contributor --sdk-auth | base64 -w0" >>
    
    ################################################################################
    # Specify if the cluster is Kubernetes RBAC enabled or not
    rbac:
        enabled: false # true/false
    
    # Specify aks cluster related information. THIS IS BEING DEPRECATED.
    aksClusterConfiguration:
        apiServerAddress: <aks-api-server-address>