Dela via


Aktivera stöd för flera namnområden i ett AKS-kluster med hjälp av AGIC

Kubernetes-namnområden gör det möjligt för ett Kubernetes-kluster att partitioneras och allokeras till undergrupper i ett större team. Dessa undergrupper kan sedan distribuera och hantera infrastruktur med finare kontroller av resurser, säkerhet och konfiguration. Kubernetes gör att en eller flera ingressresurser kan definieras oberoende av varandra inom varje namnområde.

Från och med version 0.7 kan Application Gateway Kubernetes Ingress Controller (AGIC) mata in händelser från och observera flera namnområden. Om en AKS-administratör (Azure Kubernetes Service) bestämmer sig för att använda Azure Application Gateway som ingress använder alla namnområden samma distribution av Application Gateway. En enda installation av AGIC övervakar tillgängliga namnområden och konfigurerar den Application Gateway-distribution som den är associerad med.

Version 0.7 av AGIC fortsätter att enbart observera default namnområdet, såvida du inte uttryckligen ändrar det till ett eller flera olika namnområden i Helm-konfigurationen.

Dricks

Överväg Application Gateway för containrar för din Kubernetes-ingresslösning.

Aktivera stöd för flera namnområden

  1. Ändra filen helm-config.yaml på något av följande sätt:

    • watchNamespace Ta bort nyckeln helt från helm-config.yaml. AGIC observerar alla namnområden.
    • Ange watchNamespace till en tom sträng. AGIC observerar alla namnområden.
    • Lägg till flera namnområden avgränsade med ett kommatecken (till exempel watchNamespace: default,secondNamespace). AGIC observerar endast dessa namnområden.
  2. Använd Helm-malländringar genom att köra helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azure.

När du har distribuerat AGIC med möjlighet att observera flera namnområden utför den följande åtgärder:

  • Visar en lista över inkommande resurser från alla tillgängliga namnområden
  • Filter för inkommande resurser som kommenterats med kubernetes.io/ingress.class: azure/application-gateway
  • Skapar en kombinerad Application Gateway-konfiguration
  • Tillämpar konfigurationen på den associerade Application Gateway-distributionen via Azure Resource Manager

Hantera konfigurationer i konflikt

Resurser med flera namnrymder kan instruera AGIC att skapa konfigurationer i konflikt för en enda Application Gateway-distribution. Två ingresser kan alltså göra anspråk på samma domän.

Överst i hierarkin kan AGIC skapa lyssnare (IP-adress, port och värd) och routningsregler (bindningslyssnare, serverdelspool och HTTP-inställningar). Flera namnområden och ingresser kan dela dem.

Å andra sidan kan AGIC skapa sökvägar, serverdelspooler, HTTP-inställningar och TLS-certifikat för endast ett namnområde och ta bort dubbletter.

Tänk dig till exempel följande duplicerade ingressresurser som definierats i staging namnrymderna och production för 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

Trots de två ingressresurser som kräver trafik för www.contoso.com att dirigeras till respektive Kubernetes-namnområden kan endast en serverdel betjäna trafiken. AGIC skapar en konfiguration "först in, först ut" för en av resurserna. Om två ingressresurser skapas samtidigt har den tidigare i alfabetet företräde. Baserat på den här egenskapen skapar AGIC inställningar för ingressen production . Application Gateway har konfigurerats med följande resurser:

  • Åhörare: fl-www.contoso.com-80
  • Routningsregel: rr-www.contoso.com-80
  • Serverdelspool: pool-production-contoso-web-service-80-bp-80
  • HTTP-inställningar: bp-production-contoso-web-service-80-80-websocket-ingress
  • Hälsoavsökning: pb-production-contoso-web-service-80-websocket-ingress

Kommentar

Förutom lyssnaren och routningsregeln innehåller de skapade Application Gateway-resurserna namnet på namnområdet (production) som AGIC skapade dem för.

Om de två ingressresurserna introduceras i AKS-klustret vid olika tidpunkter kommer AGIC sannolikt att hamna i ett scenario där den konfigurerar om Application Gateway och omdirigerar trafik från namespace-B till namespace-A.

Om du till exempel lägger till staging först konfigurerar AGIC Application Gateway för att dirigera trafik till mellanlagringsserverdelspoolen. I ett senare skede leder införandet av production ingress till att AGIC omprogrammerar Application Gateway, vilket börjar dirigera trafik till production serverdelspoolen.

Begränsa åtkomsten till namnområden

Som standard konfigurerar AGIC Application Gateway baserat på kommenterad ingress inom valfritt namnområde. Om du vill begränsa det här beteendet har du följande alternativ:

  • Begränsa namnrymderna genom att uttryckligen definiera namnområden som AGIC ska observera via watchNamespace YAML-nyckeln i helm-config.yaml.
  • Använd roll- och rollbindningsobjekt för att begränsa AGIC till specifika namnområden.

Helm-exempelkonfigurationsfil

    # 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>