Sdílet prostřednictvím


Povolení podpory více oborů názvů v clusteru AKS pomocí AGIC

Obory názvů Kubernetes umožňují rozdělit cluster Kubernetes na oddíly a přidělit je do podskupin většího týmu. Tyto podskupiny pak můžou nasazovat a spravovat infrastrukturu s jemnými ovládacími prvky prostředků, zabezpečení a konfigurace. 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 může kontroler příchozího přenosu dat služby Application Gateway Kubernetes (AGIC) ingestovat události z více oborů názvů a sledovat je. Pokud se správce služby Azure Kubernetes Service (AKS) rozhodne použít Aplikace Azure lication Gateway jako příchozí přenos dat, všechny obory názvů používají stejné nasazení služby Application Gateway. Jedna instalace AGIC monitoruje přístupné obory názvů a konfiguruje nasazení služby Application Gateway, ke kterému je přidružená.

Verze 0.7 AGIC nadále sleduje default výhradně obor názvů, pokud ho explicitně nezměníte na jeden nebo více různých oborů názvů v konfiguraci Helm.

Tip

Zvažte službu Application Gateway pro kontejnery pro vaše řešení příchozího přenosu dat Kubernetes.

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

  1. Upravte soubor helm-config.yaml jedním z následujících způsobů:

    • watchNamespace Odstraňte klíč zcela z helm-config.yaml. AGIC sleduje všechny obory názvů.
    • Nastavte watchNamespace na prázdný řetězec. AGIC sleduje všechny obory názvů.
    • Přidejte více oborů názvů oddělených čárkou (například watchNamespace: default,secondNamespace). AGIC sleduje tyto obory názvů výhradně.
  2. Použití změn šablony Helm spuštěním helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azurepříkazu .

Jakmile nasadíte AGIC s možností sledovat více oborů názvů, provede 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
  • Vytvoří kombinovanou konfiguraci služby Application Gateway.
  • Použije konfiguraci pro přidružené nasazení služby Application Gateway prostřednictvím Azure Resource Manageru.

Zpracování konfliktních konfigurací

Prostředky příchozího přenosu dat s více obory názvů můžou AGIC instruovat, aby vytvořila konfliktní konfigurace pro jedno nasazení služby Application Gateway. To znamená, že dvě příchozí přenosy dat by mohly deklarovat stejnou doménu.

V horní části hierarchie může AGIC vytvářet naslouchací procesy (IP adresu, port a hostitele) a pravidla směrování (naslouchací proces vazby, back-endový fond a nastavení HTTP). Více oborů názvů a příchozích přenosů dat je může sdílet.

Na druhou stranu může AGIC vytvářet cesty, back-endové fondy, nastavení HTTP a certifikáty TLS pouze pro jeden obor názvů a odebírat duplicity.

Představte si například následující duplicitní prostředky příchozího přenosu dat definované v těchto staging oborech názvů:production 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 pro jeden z prostředků jako první. 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 vytvoří AGIC nastavení pro production příchozí přenos dat. Služba Application Gateway je nakonfigurovaná s následujícími prostředky:

  • Posluchač: 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ý je AGIC vytvořil.

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

Pokud například přidáte staging první, 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ů

AGIC ve výchozím nastavení 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ů, které má AGIC sledovat prostřednictvím watchNamespace klíče YAML v helm-config.yaml.
  • Pomocí objektů Role a RoleBinding omezte 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 accessible 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>