Włączanie obsługi wielu przestrzeni nazw w klastrze usługi AKS przy użyciu programu AGIC
Przestrzenie nazw Kubernetes umożliwiają partycjonowanie klastra Kubernetes i przydzielanie ich do podgrup większego zespołu. Te podgrupy mogą następnie wdrażać infrastrukturę i zarządzać nią za pomocą bardziej precyzyjnych mechanizmów kontroli zasobów, zabezpieczeń i konfiguracji. Platforma Kubernetes umożliwia niezależne definiowanie co najmniej jednego zasobu przychodzącego w każdej przestrzeni nazw.
Od wersji 0.7 kontroler ruchu przychodzącego (AGIC) usługi Application Gateway może pozyskiwać zdarzenia z wielu przestrzeni nazw i obserwować je. Jeśli administrator usługi Azure Kubernetes Service (AKS) zdecyduje się użyć bramy aplikacja systemu Azure jako ruchu przychodzącego, wszystkie przestrzenie nazw używają tego samego wdrożenia usługi Application Gateway. Pojedyncza instalacja programu AGIC monitoruje dostępne przestrzenie nazw i konfiguruje wdrożenie usługi Application Gateway skojarzone z nim.
Wersja 0.7 programu AGIC będzie nadal obserwować default
wyłącznie przestrzeń nazw, chyba że jawnie zmienisz ją na co najmniej jedną inną przestrzeń nazw w konfiguracji programu Helm.
Napiwek
Rozważ użycie usługi Application Gateway dla kontenerów dla rozwiązania ruchu przychodzącego Kubernetes.
Włączanie obsługi wielu przestrzeni nazw
Zmodyfikuj plik helm-config.yaml na jeden z następujących sposobów:
watchNamespace
Usuń klucz całkowicie z pliku helm-config.yaml. Program AGIC obserwuje wszystkie przestrzenie nazw.- Ustaw
watchNamespace
wartość na pusty ciąg. Program AGIC obserwuje wszystkie przestrzenie nazw. - Dodaj wiele przestrzeni nazw rozdzielonych przecinkami (na przykład
watchNamespace: default,secondNamespace
). AGIC obserwuje te przestrzenie nazw wyłącznie.
Zastosuj zmiany szablonu programu Helm, uruchamiając polecenie
helm install -f helm-config.yaml application-gateway-kubernetes-ingress/ingress-azure
.
Po wdrożeniu programu AGIC z możliwością obserwowania wielu przestrzeni nazw wykonuje następujące akcje:
- Wyświetla listę zasobów przychodzących ze wszystkich dostępnych przestrzeni nazw
- Filtry do zasobów przychodzących z adnotacjami
kubernetes.io/ingress.class: azure/application-gateway
- Komponuje połączoną konfigurację usługi Application Gateway
- Stosuje konfigurację do skojarzonego wdrożenia usługi Application Gateway za pośrednictwem usługi Azure Resource Manager
Obsługa konfiguracji powodującej konflikt
Zasoby przychodzące z wieloma przestrzeniami nazw mogą poinstruować program AGIC o utworzeniu konfiguracji powodujących konflikt dla pojedynczego wdrożenia usługi Application Gateway. Oznacza to, że dwa wejścia mogą uznać tę samą domenę.
W górnej części hierarchii program AGIC może tworzyć odbiorniki (adres IP, port i host) oraz reguły routingu (powiązanie odbiornika, puli zaplecza i ustawień PROTOKOŁU HTTP). Wiele przestrzeni nazw i ruchu przychodzącego może je udostępniać.
Z drugiej strony program AGIC może tworzyć ścieżki, pule zaplecza, ustawienia HTTP i certyfikaty TLS tylko dla jednej przestrzeni nazw i usuwać duplikaty.
Rozważmy na przykład następujące zduplikowane zasoby ruchu przychodzącego zdefiniowane w staging
przestrzeniach nazw i production
dla elementu 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
Pomimo dwóch zasobów przychodzących wymagających ruchu do www.contoso.com
kierowania do odpowiednich przestrzeni nazw kubernetes, tylko jedno zaplecze może obsługiwać ruch. AGIC tworzy konfigurację na zasadzie "pierwszy na, pierwszy na wyjęcie" dla jednego z zasobów. Jeśli dwa zasoby ruchu przychodzącego są tworzone w tym samym czasie, pierwszeństwo ma jeden wcześniejszy alfabet. Na podstawie tej właściwości program AGIC tworzy ustawienia dla ruchu przychodzącego production
. Usługa Application Gateway jest skonfigurowana przy użyciu następujących zasobów:
- Słuchacz:
fl-www.contoso.com-80
- Reguła routingu:
rr-www.contoso.com-80
- Pula zaplecza:
pool-production-contoso-web-service-80-bp-80
- Ustawienia protokołu HTTP:
bp-production-contoso-web-service-80-80-websocket-ingress
- Sonda kondycji:
pb-production-contoso-web-service-80-websocket-ingress
Uwaga
Z wyjątkiem reguły odbiornika i routingu utworzone zasoby usługi Application Gateway zawierają nazwę przestrzeni nazw (production
), dla której zostały utworzone przez usługę AGIC.
Jeśli dwa zasoby ruchu przychodzącego zostaną wprowadzone do klastra usługi AKS w różnych punktach w czasie, usługa AGIC prawdopodobnie zakończy się w scenariuszu, w którym ponownie skonfiguruje usługę Application Gateway i przekierowuje ruch z namespace-B
do namespace-A
systemu .
Jeśli na przykład dodasz staging
najpierw, usługa AGIC skonfiguruje usługę Application Gateway do kierowania ruchu do przejściowej puli zaplecza. Na późniejszym etapie wprowadzenie production
ruchu przychodzącego powoduje, że usługa AGIC przeprogramuje usługę Application Gateway, która rozpoczyna kierowanie ruchu do puli zaplecza production
.
Ograniczanie dostępu do przestrzeni nazw
Domyślnie usługa AGIC konfiguruje usługę Application Gateway na podstawie adnotacji przychodzących w dowolnej przestrzeni nazw. Jeśli chcesz ograniczyć to zachowanie, masz następujące opcje:
- Ogranicz przestrzenie nazw, jawnie definiując przestrzenie nazw, które program AGIC powinien obserwować za pośrednictwem
watchNamespace
klucza YAML w pliku helm-config.yaml. - Użyj obiektów Role i RoleBinding, aby ograniczyć AGIC do określonych przestrzeni nazw.
Przykładowy plik konfiguracji programu 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>