Entrées externes ou internes Azure Kubernetes Service (AKS) pour le déploiement du module complémentaire de maillage de services Istio
Cet article vous montre comment déployer des entrées externes ou internes pour le module complémentaire de maillage de services Istio pour un cluster Azure Kubernetes Service (AKS).
Remarque
Lors de l’exécution d’une mise à niveau de révision mineure du module complémentaire Istio, un autre déploiement pour les passerelles externes/internes est créé pour la nouvelle révision du plan de contrôle.
Prérequis
Ce guide suppose que vous avez suivi la documentation pour activer le module complémentaire Istio sur un cluster AKS, déployer un exemple d’application et définir les variables d’environnement.
Activer la passerelle d’entrée externe
Utilisez az aks mesh enable-ingress-gateway
pour activer une entrée Istio accessible en externe sur votre cluster AKS :
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Utilisez kubectl get svc
pour vérifier le service mappé à la passerelle d’entrée :
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Observez dans la sortie si l’adresse IP externe du service est accessible publiquement :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-istio-ingressgateway-external LoadBalancer 10.0.10.249 <EXTERNAL_IP> 15021:30705/TCP,80:32444/TCP,443:31728/TCP 4m21s
Remarque
Les personnalisations de l’adresse IP sur les passerelles internes et externes ne sont pas encore prises en charge. Les personnalisations d’adresses IP sur les spécifications d’entrée sont rétablies par le module complémentaire Istio. Il est prévu d’autoriser ces personnalisations dans l’implémentation de l’API de passerelle pour le module complémentaire Istio.
Par défaut, les applications ne sont pas accessibles depuis l’extérieur du cluster après l’activation de la passerelle d’entrée. Pour rendre une application accessible, mappez l’entrée de l’exemple de déploiement à la passerelle d’entrée Istio en utilisant le manifeste suivant :
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: bookinfo-gateway-external
spec:
selector:
istio: aks-istio-ingressgateway-external
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: bookinfo-vs-external
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway-external
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
Notes
Le sélecteur utilisé dans l’objet Passerelle pointe vers istio: aks-istio-ingressgateway-external
, qui se trouve en tant qu’étiquette sur le service mappé à l’entrée externe activée précédemment.
Définissez des variables d’environnement pour l’hôte et les ports d’entrée externes :
export INGRESS_HOST_EXTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT_EXTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-external -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL_EXTERNAL=$INGRESS_HOST_EXTERNAL:$INGRESS_PORT_EXTERNAL
Récupérez l’adresse externe de l’exemple d’application :
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Accédez à l’URL de la sortie de la commande précédente et vérifiez que la page des produits de l’exemple d’application est affichée. Vous pouvez aussi utiliser curl
pour vérifier que l’exemple d’application est accessible. Par exemple :
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Vérifiez que la page des produits de l’exemple d’application est accessible. La sortie attendue est :
<title>Simple Bookstore App</title>
Activer la passerelle d’entrée interne
Utilisez az aks mesh enable-ingress-gateway
pour activer une entrée Istio interne sur votre cluster AKS :
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Utilisez kubectl get svc
pour vérifier le service mappé à la passerelle d’entrée :
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Observez dans la sortie si l’adresse IP externe du service n’est pas une adresse accessible publiquement et qu’elle est accessible seulement localement :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aks-istio-ingressgateway-internal LoadBalancer 10.0.182.240 <IP> 15021:30764/TCP,80:32186/TCP,443:31713/TCP 87s
Après avoir activé la passerelle d’entrée, les applications doivent être exposées via la passerelle et les règles de routage doivent être configurées en conséquence. Utilisez le manifeste suivant pour mapper l’entrée de l’exemple de déploiement à la passerelle d’entrée Istio :
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: bookinfo-internal-gateway
spec:
selector:
istio: aks-istio-ingressgateway-internal
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: bookinfo-vs-internal
spec:
hosts:
- "*"
gateways:
- bookinfo-internal-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
Notes
Le sélecteur utilisé dans l’objet Passerelle pointe vers istio: aks-istio-ingressgateway-internal
, qui se trouve en tant qu’étiquette sur le service mappé à l’entrée interne activée précédemment.
Définissez des variables d’environnement pour l’hôte et les ports d’entrée internes :
export INGRESS_HOST_INTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-internal -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT_INTERNAL=$(kubectl -n aks-istio-ingress get service aks-istio-ingressgateway-internal -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL_INTERNAL=$INGRESS_HOST_INTERNAL:$INGRESS_PORT_INTERNAL
Récupérez l’adresse de l’exemple d’application :
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Accédez à l’URL de la sortie de la commande précédente et vérifiez que la page des produits de l’exemple d’application n’est PAS affichée. Vous pouvez aussi utiliser curl
pour vérifier que l’exemple d’application n’est PAS accessible. Par exemple :
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Utilisez kubectl exec
pour vérifier que l’application est accessible à partir du réseau virtuel du cluster :
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS "http://$GATEWAY_URL_INTERNAL/productpage" | grep -o "<title>.*</title>"
Vérifiez que la page des produits de l’exemple d’application est accessible. La sortie attendue est :
<title>Simple Bookstore App</title>
Personnalisation des annotations du service de passerelle d’entrée
Les annotations suivantes peuvent être ajoutées au service Kubernetes pour les passerelles d’entrée externes et internes :
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: pour lier une passerelle d’entrée interne à un sous-réseau spécifique.service.beta.kubernetes.io/azure-shared-securityrule
: pour exposer la passerelle d’entrée via une règle de sécurité augmentée.service.beta.kubernetes.io/azure-allowed-service-tags
: pour spécifier quelles étiquettes de service la passerelle d’entrée peuvent recevoir des demandes.service.beta.kubernetes.io/azure-load-balancer-ipv4
: pour configurer une adresse IPv4 statique.service.beta.kubernetes.io/azure-load-balancer-resource-group
: pour spécifier le groupe de ressources d’une IP publique dans un groupe de ressources différent du cluster.service.beta.kubernetes.io/azure-pip-name
: pour spécifier le nom d’une adresse IP publique.
Supprimer des ressources
Si vous souhaitez nettoyer les passerelles d’entrée externes ou internes Istio, mais laissez le maillage activé sur le cluster, exécutez la commande suivante :
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP}
Si vous voulez nettoyer le maillage de services Istio et les entrées (en conservant le cluster), exécutez la commande suivante :
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Si vous voulez nettoyer toutes les ressources créées à partir des documents sur les procédures Istio, exécutez la commande suivante :
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Étapes suivantes
Remarque
En cas de problèmes rencontrés lors du déploiement de la passerelle d’entrée Istio ou de la configuration du routage du trafic d’entrée, reportez-vous à l’article sur la résolution des problèmes liés aux passerelles d’entrée du module complémentaire Istio
Azure Kubernetes Service