Megosztás a következőn keresztül:


Az Azure Kubernetes Service (AKS) külső vagy belső bejövő bejövői az Istio service mesh bővítmény üzembe helyezéséhez

Ez a cikk bemutatja, hogyan helyezhet üzembe külső vagy belső bejövő forgalmat az Istio service mesh bővítményhez az Azure Kubernetes Service (AKS) fürthöz.

Feljegyzés

Az Istio bővítmény kisebb változatfrissítésekor a külső/belső átjárók egy másik központi telepítése jön létre az új vezérlősík változatához.

Előfeltételek

Ez az útmutató feltételezi, hogy követte a dokumentációt , hogy engedélyezze az Istio bővítményt egy AKS-fürtön, üzembe helyezhessen egy mintaalkalmazást, és környezeti változókat állítson be.

Külső bejövő átjáró engedélyezése

Külső hozzáférésű Istio-bejövő forgalom engedélyezésére használható az aks mesh enable-ingress-gateway az AKS-fürtön:

az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external

A kubectl get svc bejövő átjáróhoz hozzárendelt szolgáltatás ellenőrzése:

kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress

Figyelje meg a kimenetből, hogy a szolgáltatás külső IP-címe nyilvánosan elérhető:

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

Feljegyzés

A belső és külső átjárók IP-címének testreszabása még nem támogatott. Az Istio bővítmény visszaállítja az IP-címek testreszabását a bejövő adatok specifikációihoz. A tervek szerint ezek a testreszabások engedélyezve lesznek az Istio bővítmény Átjáró API-implementációjában.

Az alkalmazások alapértelmezés szerint nem érhetők el a fürtön kívülről a bejövő átjáró engedélyezése után. Az alkalmazások akadálymentesítéséhez képezd le a mintatelepítés bejövő forgalmát az Istio bejövő átjárójára a következő jegyzék használatával:

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

Feljegyzés

Az Átjáró objektumban istio: aks-istio-ingressgateway-externalhasznált választó a korábban engedélyezett külső bejövő forgalomra leképezett szolgáltatás címkéjeként található.

Környezeti változók beállítása külső bejövő gazdagéphez és portokhoz:

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

Kérje le a mintaalkalmazás külső címét:

echo "http://$GATEWAY_URL_EXTERNAL/productpage"

Lépjen az előző parancs kimenetéből az URL-címre, és ellenőrizze, hogy megjelenik-e a mintaalkalmazás termékoldala. Másik lehetőségként azt is curl ellenőrizheti, hogy a mintaalkalmazás elérhető-e. Példa:

curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"

Ellenőrizze, hogy a mintaalkalmazás termékoldala elérhető-e. A várt kimenet a következő:

<title>Simple Bookstore App</title>

Belső bejövő átjáró engedélyezése

Belső Istio-bejövő forgalom engedélyezésére használható az aks mesh enable-ingress-gateway az AKS-fürtön:

az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal

A kubectl get svc bejövő átjáróhoz hozzárendelt szolgáltatás ellenőrzése:

kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress

Figyelje meg a kimenetből, hogy a szolgáltatás külső IP-címe nem nyilvánosan elérhető, és ehelyett csak helyileg érhető el:

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

A bejövő átjáró engedélyezése után az alkalmazásokat az átjárón keresztül kell elérhetővé tenni, és ennek megfelelően kell konfigurálni az útválasztási szabályokat. A mintatelepítés bejövő forgalmának az Istio bejövő átjáróra való leképezéséhez használja a következő jegyzékfájlt:

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

Feljegyzés

Az Átjáró objektumban istio: aks-istio-ingressgateway-internalhasznált választó a korábban engedélyezett belső bejövő forgalomra leképezett szolgáltatás címkéjeként található.

Környezeti változók beállítása belső bejövő gazdagéphez és portokhoz:

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

Kérje le a mintaalkalmazás címét:

echo "http://$GATEWAY_URL_INTERNAL/productpage"

Lépjen az előző parancs kimenetéből az URL-címre, és győződjön meg arról, hogy a mintaalkalmazás termékoldala NEM jelenik meg. Másik lehetőségként azt is curl ellenőrizheti, hogy a mintaalkalmazás NEM érhető-e el. Példa:

curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"

Annak ellenőrzésére használható kubectl exec , hogy az alkalmazás elérhető-e a fürt virtuális hálózatán belülről:

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>"

Ellenőrizze, hogy a mintaalkalmazás termékoldala elérhető-e. A várt kimenet a következő:

<title>Simple Bookstore App</title>

Bejövő átjáró szolgáltatásjegyzetének testreszabása

A külső és belső bejövő átjárók Kubernetes szolgáltatásához a következő széljegyzetek vehetők fel:

  • service.beta.kubernetes.io/azure-load-balancer-internal-subnet: belső bejövő átjáró kötése egy adott alhálózathoz.
  • service.beta.kubernetes.io/azure-shared-securityrule: a bejövő átjáró kibővített biztonsági szabályon keresztüli felfedése.
  • service.beta.kubernetes.io/azure-allowed-service-tags: annak megadásához, hogy a bejövő átjáró mely szolgáltatáscímkéktől fogadhat kéréseket.
  • service.beta.kubernetes.io/azure-load-balancer-ipv4: statikus IPv4-cím konfigurálásához.
  • service.beta.kubernetes.io/azure-load-balancer-resource-group: egy nyilvános IP-cím erőforráscsoportjának a fürttől eltérő erőforráscsoportban való megadásához.
  • service.beta.kubernetes.io/azure-pip-name: egy nyilvános IP-cím nevének megadásához.

Erőforrások törlése

Ha törölni szeretné az Istio külső vagy belső bejövő átjáróit, de hagyja engedélyezve a hálót a fürtön, futtassa a következő parancsot:

az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP}

Ha törölni szeretné az Istio szolgáltatáshálót és a bejövő forgalmat (a fürt mögött hagyva), futtassa a következő parancsot:

az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Ha törölni szeretné az Istio útmutató dokumentumaiból létrehozott összes erőforrást, futtassa a következő parancsot:

az group delete --name ${RESOURCE_GROUP} --yes --no-wait

Következő lépések

Feljegyzés

Az Istio bejövő átjáró üzembe helyezésével vagy a bejövő forgalom útválasztásának konfigurálásával kapcsolatos problémák esetén tekintse meg az Istio bővítmény bejövő átjáróinak hibaelhárításával kapcsolatos cikket