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
Ä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.
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>