Delen via


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

Notitie

Raadpleeg het artikel over het oplossen van problemen met het oplossen van problemen met het implementeren van de Istio-ingangsgateway of het configureren van inkomend verkeer routeren