Externí nebo interní příchozí přenos dat služby Azure Kubernetes Service (AKS) pro nasazení doplňku Istio Service Mesh

V tomto článku se dozvíte, jak nasadit externí nebo interní příchozí přenos dat pro doplněk Istio Service Mesh pro cluster Azure Kubernetes Service (AKS).

Poznámka:

Při provádění menší revize upgradu doplňku Istio se pro novou revizi řídicí roviny vytvoří další nasazení pro externí nebo interní brány.

Požadavky

V této příručce se předpokládá, že jste postupovali podle dokumentace , abyste povolili doplněk Istio v clusteru AKS, nasadili ukázkovou aplikaci a nastavili proměnné prostředí.

Povolení externí brány příchozího přenosu dat

Slouží az aks mesh enable-ingress-gateway k povolení externě přístupného příchozího přenosu dat Istio v clusteru AKS:

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

Slouží kubectl get svc ke kontrole služby mapované na bránu příchozího přenosu dat:

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

Z výstupu si všimněte, že externí IP adresa služby je veřejně přístupná:

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

Aplikace nejsou ve výchozím nastavení přístupné mimo cluster po povolení brány příchozího přenosu dat. Pokud chcete aplikaci zpřístupnit, namapujte příchozí přenos dat ukázkového nasazení na bránu příchozího přenosu dat Istio pomocí následujícího manifestu:

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
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/v1alpha3
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

Poznámka:

Selektor použitý v objektu brány odkazuje na istio: aks-istio-ingressgateway-externalobjekt , který lze najít jako popisek ve službě namapovaný na externí příchozí přenos dat, který byl povolen dříve.

Nastavte proměnné prostředí pro hostitele a porty externího příchozího přenosu dat:

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

Načtení externí adresy ukázkové aplikace:

echo "http://$GATEWAY_URL_EXTERNAL/productpage"

Přejděte na adresu URL z výstupu předchozího příkazu a ověřte, že se zobrazí stránka produktu ukázkové aplikace. Alternativně můžete také ověřit curl , že je ukázková aplikace přístupná. Příklad:

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

Ověřte, že je stránka produktu ukázkové aplikace přístupná. Očekávaný výstup je:

<title>Simple Bookstore App</title>

Povolení interní brány příchozího přenosu dat

Slouží az aks mesh enable-ingress-gateway k povolení interního příchozího přenosu dat Istio v clusteru AKS:

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

Slouží kubectl get svc ke kontrole služby mapované na bránu příchozího přenosu dat:

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

Podívejte se na výstup, že externí IP adresa služby není veřejně přístupná a je přístupná jenom místně:

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

Aplikace se po povolení brány příchozího přenosu dat nemapují na bránu příchozího přenosu dat Istio. Pomocí následujícího manifestu namapujte příchozí přenos dat ukázkového nasazení na bránu příchozího přenosu dat Istio:

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
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/v1alpha3
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

Poznámka:

Selektor použitý v objektu brány odkazuje na istio: aks-istio-ingressgateway-internalobjekt , který lze najít jako popisek ve službě namapovaný na interní příchozí přenos dat, který byl povolen dříve.

Nastavte proměnné prostředí pro hostitele a porty interního příchozího přenosu dat:

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

Načtěte adresu ukázkové aplikace:

echo "http://$GATEWAY_URL_INTERNAL/productpage"

Přejděte na adresu URL z výstupu předchozího příkazu a ověřte, že se nezobrazí stránka produktu ukázkové aplikace. Alternativně můžete také použít curl k potvrzení, že ukázková aplikace není přístupná. Příklad:

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

Slouží kubectl exec k potvrzení, že aplikace je přístupná z virtuální sítě clusteru:

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

Ověřte, že je stránka produktu ukázkové aplikace přístupná. Očekávaný výstup je:

<title>Simple Bookstore App</title>

Odstranění prostředků

Pokud chcete vyčistit síť služby Istio a příchozí přenos dat (opouští se za clusterem), spusťte následující příkaz:

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

Pokud chcete vyčistit všechny prostředky vytvořené z dokumentů s postupy istio, spusťte následující příkaz:

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

Další kroky