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-external
objekt , 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-internal
objekt , 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.
Azure Kubernetes Service