Zewnętrzne lub wewnętrzne wejścia usługi Azure Kubernetes Service (AKS) dla wdrożenia usługi Istio Service Mesh
W tym artykule przedstawiono sposób wdrażania zewnętrznych lub wewnętrznych dodatków siatki usługi Istio dla klastra usługi Azure Kubernetes Service (AKS).
Uwaga
Podczas wykonywania drobnego uaktualnienia poprawki dodatku Istio zostanie utworzone kolejne wdrożenie dla bram zewnętrznych/wewnętrznych dla nowej poprawki płaszczyzny sterowania.
Wymagania wstępne
W tym przewodniku założono, że wykonano czynności opisane w dokumentacji , aby włączyć dodatek Istio w klastrze usługi AKS, wdrożyć przykładową aplikację i ustawić zmienne środowiskowe.
Włączanie zewnętrznej bramy ruchu przychodzącego
Użyj az aks mesh enable-ingress-gateway
polecenia , aby włączyć zewnętrznie dostępny ruch przychodzący Istio w klastrze usługi AKS:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Użyj kubectl get svc
polecenia , aby sprawdzić usługę zamapowana na bramę ruchu przychodzącego:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Zwróć uwagę na dane wyjściowe, że zewnętrzny adres IP usługi jest publicznie dostępny:
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
Uwaga
Dostosowania adresu IP w bramach wewnętrznych i zewnętrznych nie są jeszcze obsługiwane. Dostosowania adresów IP w specyfikacji ruchu przychodzącego są przywracane przez dodatek Istio. Planowane jest zezwolenie na te dostosowania w implementacji interfejsu API bramy dla dodatku Istio w przyszłości.
Aplikacje nie są domyślnie dostępne spoza klastra po włączeniu bramy ruchu przychodzącego. Aby udostępnić aplikację, zamapuj ruch przychodzący przykładowego wdrożenia na bramę ruchu przychodzącego Istio przy użyciu następującego 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
Uwaga
Selektor używany w obiekcie bramy wskazuje element istio: aks-istio-ingressgateway-external
, który można znaleźć jako etykietę w usłudze zamapowanej na zewnętrzny ruch przychodzący, który został włączony wcześniej.
Ustaw zmienne środowiskowe dla zewnętrznego hosta i portów przychodzących:
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
Pobierz zewnętrzny adres przykładowej aplikacji:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Przejdź do adresu URL z danych wyjściowych poprzedniego polecenia i upewnij się, że zostanie wyświetlona strona produktu przykładowej aplikacji. Alternatywnie możesz również użyć curl
polecenia , aby potwierdzić, że przykładowa aplikacja jest dostępna. Na przykład:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Upewnij się, że strona produktu przykładowej aplikacji jest dostępna. Oczekiwane dane wyjściowe to:
<title>Simple Bookstore App</title>
Włączanie wewnętrznej bramy ruchu przychodzącego
Użyj az aks mesh enable-ingress-gateway
polecenia , aby włączyć wewnętrzny ruch przychodzący istio w klastrze usługi AKS:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Użyj kubectl get svc
polecenia , aby sprawdzić usługę zamapowana na bramę ruchu przychodzącego:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Zwróć uwagę na dane wyjściowe, że zewnętrzny adres IP usługi nie jest publicznie dostępny i jest dostępny tylko lokalnie:
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 włączeniu bramy ruchu przychodzącego należy odpowiednio skonfigurować aplikacje za pośrednictwem bramy i reguł routingu. Użyj następującego manifestu, aby zamapować ruch przychodzący przykładowego wdrożenia na bramę ruchu przychodzącego 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
Uwaga
Selektor używany w obiekcie bramy wskazuje istio: aks-istio-ingressgateway-internal
element , który można znaleźć jako etykietę w usłudze zamapowanej na wewnętrzny ruch przychodzący, który został włączony wcześniej.
Ustaw zmienne środowiskowe dla wewnętrznego hosta i portów ruchu przychodzącego:
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
Pobierz adres przykładowej aplikacji:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Przejdź do adresu URL z danych wyjściowych poprzedniego polecenia i upewnij się, że strona produktu przykładowej aplikacji nie jest wyświetlana. Alternatywnie możesz również użyć curl
polecenia , aby potwierdzić, że przykładowa aplikacja nie jest dostępna. Na przykład:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Użyj kubectl exec
polecenia , aby potwierdzić, że aplikacja jest dostępna z poziomu sieci wirtualnej klastra:
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>"
Upewnij się, że strona produktu przykładowej aplikacji jest dostępna. Oczekiwane dane wyjściowe to:
<title>Simple Bookstore App</title>
Dostosowywanie adnotacji usługi bramy ruchu przychodzącego
Następujące adnotacje można dodać do usługi Kubernetes dla bram zewnętrznych i wewnętrznych ruchu przychodzącego:
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: aby powiązać wewnętrzną bramę ruchu przychodzącego z określoną podsiecią.service.beta.kubernetes.io/azure-shared-securityrule
: do uwidaczniania bramy ruchu przychodzącego za pomocą rozszerzonej reguły zabezpieczeń.service.beta.kubernetes.io/azure-allowed-service-tags
: w celu określenia, z których tagów usługi brama ruchu przychodzącego może odbierać żądania.service.beta.kubernetes.io/azure-load-balancer-ipv4
: do konfigurowania statycznego adresu IPv4.service.beta.kubernetes.io/azure-load-balancer-resource-group
: do określania grupy zasobów publicznego adresu IP w innej grupie zasobów z klastra.service.beta.kubernetes.io/azure-pip-name
: do określania nazwy publicznego adresu IP.
Usuwanie zasobów
Jeśli chcesz wyczyścić zewnętrzne lub wewnętrzne bramy ruchu przychodzącego Istio, ale pozostaw włączoną siatkę w klastrze, uruchom następujące polecenie:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Jeśli chcesz wyczyścić siatkę usługi Istio i ruch przychodzący (pozostawiając za klastrem), uruchom następujące polecenie:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Jeśli chcesz wyczyścić wszystkie zasoby utworzone na podstawie dokumentów z instrukcjami istio, uruchom następujące polecenie:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Następne kroki
Uwaga
Jeśli wystąpią problemy z wdrażaniem bramy ruchu przychodzącego Istio lub konfigurowaniem routingu ruchu przychodzącego, zapoznaj się z artykułem dotyczącym rozwiązywania problemów z bramami ruchu przychodzącego dodatku Istio
Azure Kubernetes Service