Externe of interne ingresses van Azure Kubernetes Service (AKS) voor de implementatie van de invoegtoepassing Istio-service
In dit artikel leest u hoe u externe of interne ingresses voor istio service mesh-invoegtoepassing voor AKS-cluster (Azure Kubernetes Service) implementeert.
Notitie
Bij het uitvoeren van een secundaire revisie-upgrade van de Istio-invoegtoepassing wordt er een andere implementatie voor de externe/interne gateways gemaakt voor de nieuwe revisie van het besturingsvlak.
Vereisten
In deze handleiding wordt ervan uitgegaan dat u de documentatie hebt gevolgd om de Istio-invoegtoepassing in te schakelen op een AKS-cluster, een voorbeeldtoepassing te implementeren en omgevingsvariabelen in te stellen.
Externe toegangsbeheergateway inschakelen
Gebruik az aks mesh enable-ingress-gateway
dit om een extern toegankelijk Istio-toegangsbeheerobject in te schakelen op uw AKS-cluster:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Gebruik kubectl get svc
dit om de service te controleren die is toegewezen aan de toegangsbeheerobjectgateway:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Bekijk in de uitvoer dat het externe IP-adres van de service een openbaar toegankelijk adres is:
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
Notitie
Aanpassingen aan IP-adres op interne en externe gateways worden nog niet ondersteund. Aanpassingen van IP-adressen in de specificaties voor inkomend verkeer worden teruggedraaid door de invoegtoepassing Istio. Het is gepland om deze aanpassingen toe te staan in de gateway-API-implementatie voor de Istio-invoegtoepassing in de toekomst.
Toepassingen zijn niet standaard toegankelijk van buiten het cluster nadat de toegangsgateway is ingeschakeld. Als u een toepassing toegankelijk wilt maken, wijst u het inkomend verkeer van de voorbeeldimplementatie toe aan de istio-ingangsgateway met behulp van het volgende manifest:
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
Notitie
De selector die in het gatewayobject wordt gebruikt, verwijst naar istio: aks-istio-ingressgateway-external
, die kan worden gevonden als label op de service die is toegewezen aan het externe inkomend verkeer dat eerder is ingeschakeld.
Omgevingsvariabelen instellen voor externe ingangshost en poorten:
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
Haal het externe adres van de voorbeeldtoepassing op:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Navigeer naar de URL uit de uitvoer van de vorige opdracht en controleer of de productpagina van de voorbeeldtoepassing wordt weergegeven. U kunt ook gebruiken curl
om te bevestigen dat de voorbeeldtoepassing toegankelijk is. Voorbeeld:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Controleer of de productpagina van de voorbeeldtoepassing toegankelijk is. De verwachte uitvoer is:
<title>Simple Bookstore App</title>
Interne toegangsbeheergateway inschakelen
Gebruik az aks mesh enable-ingress-gateway
dit om een intern Istio-inkomend verkeer in te schakelen op uw AKS-cluster:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Gebruik kubectl get svc
dit om de service te controleren die is toegewezen aan de toegangsbeheerobjectgateway:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Bekijk in de uitvoer dat het externe IP-adres van de service niet openbaar toegankelijk is en in plaats daarvan alleen lokaal toegankelijk is:
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
Nadat de toegangsgateway is ingeschakeld, moeten toepassingen worden weergegeven via de gateway en moeten routeringsregels dienovereenkomstig worden geconfigureerd. Gebruik het volgende manifest om het inkomend verkeer van de voorbeeldimplementatie toe te wijzen aan de istio-ingangsgateway:
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
Notitie
De selector die in het gatewayobject wordt gebruikt, verwijst naar istio: aks-istio-ingressgateway-internal
, die kan worden gevonden als label op de service die is toegewezen aan het interne inkomend verkeer dat eerder is ingeschakeld.
Omgevingsvariabelen instellen voor interne ingangshost en poorten:
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
Haal het adres van de voorbeeldtoepassing op:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Navigeer naar de URL uit de uitvoer van de vorige opdracht en controleer of de productpagina van de voorbeeldtoepassing NIET wordt weergegeven. U kunt ook gebruiken curl
om te bevestigen dat de voorbeeldtoepassing NIET toegankelijk is. Voorbeeld:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Gebruik kubectl exec
dit om te bevestigen dat de toepassing toegankelijk is vanuit het virtuele netwerk van het 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>"
Controleer of de productpagina van de voorbeeldtoepassing toegankelijk is. De verwachte uitvoer is:
<title>Simple Bookstore App</title>
Aanpassing van inkomende gatewayserviceaantekening
De volgende aantekeningen kunnen worden toegevoegd aan de Kubernetes-service voor de externe en interne ingangsgateways:
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: om een interne ingangsgateway te binden aan een specifiek subnet.service.beta.kubernetes.io/azure-shared-securityrule
: voor het blootstellen van de toegangsbeheerobjectgateway via een uitgebreide beveiligingsregel.service.beta.kubernetes.io/azure-allowed-service-tags
: voor het opgeven van welke servicetags de toegangsbeheergateway aanvragen kan ontvangen.service.beta.kubernetes.io/azure-load-balancer-ipv4
: voor het configureren van een statisch IPv4-adres.service.beta.kubernetes.io/azure-load-balancer-resource-group
: voor het opgeven van de resourcegroep van een openbaar IP-adres in een andere resourcegroep dan het cluster.service.beta.kubernetes.io/azure-pip-name
: voor het opgeven van de naam van een openbaar IP-adres.
Resources verwijderen
Als u de externe of interne toegangsgateways van Istio wilt opschonen, maar de mesh ingeschakeld wilt laten op het cluster, voert u de volgende opdracht uit:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Als u de Istio-service-mesh en de ingresses (achter het cluster) wilt opschonen, voert u de volgende opdracht uit:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Als u alle resources wilt opschonen die zijn gemaakt op basis van de Istio instructiedocumenten, voert u de volgende opdracht uit:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Volgende stappen
Azure Kubernetes Service