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

Tato příručka 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

Poznámka:

Přizpůsobení IP adres u interních a externích bran se zatím nepodporuje. Přizpůsobení IP adres ve specifikacích příchozího přenosu dat se vrací zpět doplňkem Istio. Plánuje se povolit tato přizpůsobení v implementaci rozhraní API brány pro doplněk Istio v budoucnu.

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

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

Po povolení brány příchozího přenosu dat je potřeba aplikace zpřístupnit prostřednictvím brány a pravidel směrování, aby se odpovídajícím způsobem nakonfigurovaly. 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/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

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>

Přizpůsobení poznámek služby příchozího přenosu dat brány

Do služby Kubernetes je možné přidat následující poznámky pro externí a interní brány příchozího přenosu dat:

  • service.beta.kubernetes.io/azure-load-balancer-internal-subnet: Vytvoření vazby interní brány příchozího přenosu dat k konkrétní podsíti.
  • service.beta.kubernetes.io/azure-shared-securityrule: pro zveřejnění brány příchozího přenosu dat prostřednictvím rozšířeného pravidla zabezpečení.
  • service.beta.kubernetes.io/azure-allowed-service-tags: pro určení, ze kterých značek služeb může brána příchozího přenosu dat přijímat požadavky.
  • service.beta.kubernetes.io/azure-load-balancer-ipv4: pro konfiguraci statické adresy IPv4.
  • service.beta.kubernetes.io/azure-load-balancer-resource-group: Pro určení skupiny prostředků veřejné IP adresy v jiné skupině prostředků z clusteru.
  • service.beta.kubernetes.io/azure-pip-name: pro zadání názvu veřejné IP adresy.

Odstranění prostředků

Pokud chcete vyčistit externí nebo interní brány příchozího přenosu dat Istio, ale ponechat síť v clusteru povolenou, spusťte následující příkaz:

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

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

Poznámka:

V případě jakýchkoli problémů s nasazením brány příchozího přenosu dat Istio nebo konfigurací směrování příchozího přenosu dat najdete v článku o řešení potíží s doplňkovými bránami příchozího přenosu dat Istio.