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ů
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ě.
Použití změn šablony Helm spuštěním
helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azure
pří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>