Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak wdrożyć zewnętrzne lub wewnętrzne wejścia dla dodatku siatki usługi Istio dla klastra usługi Azure Kubernetes Service (AKS).
Uwaga
Po wykonaniu niewielkiej aktualizacji dodatku Istio zostanie utworzone kolejne wdrożenie dla bram zewnętrznych i wewnętrznych w nowej wersji 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łącz zewnętrzną bramę ruchu przychodzącego
Uwaga
Jeśli potrzebujesz bram wejściowych zorganizowanych na określonych węzłach, możesz użyć węzłów systemowych usługi AKS lub etykiety węzła azureservicemesh/istio.replica.preferred. Zasobniki mają powiązania węzłów z preferencją ważoną 100 dla węzłów systemowych usługi AKS (oznaczonych etykietą kubernetes.azure.com/mode: system) oraz z preferencją ważoną 50 dla węzłów oznaczonych etykietą azureservicemesh/istio.replica.preferred: true.
Użyj az aks mesh enable-ingress-gateway, aby włączyć zewnętrznie dostępny ingress Istio w klastrze 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
Aplikacje nie są domyślnie dostępne spoza klastra po włączeniu bramy ruchu przychodzącego. Aby uczynić aplikację dostępną, zamapuj ruch sieciowy przykładowego wdrożenia na bramę wejściową 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 Gateway wskazuje na element istio: aks-istio-ingressgateway-external, który można znaleźć jako etykietę w usłudze powiązanej z zewnętrznym ruchem przychodzącym, który został wcześniej włączony.
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łącz wewnętrzną bramę ingresu
Użyj az aks mesh enable-ingress-gateway, aby włączyć wewnętrzny punkt wejścia Istio w klastrze 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 aplikacje muszą być uwidocznione za pośrednictwem bramy, a reguły routingu należy odpowiednio skonfigurować. Użyj następującego manifestu, aby zmapować dostęp dla przykładowego wdrożenia na bramę wejściową 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 Gateway wskazuje na istio: aks-istio-ingressgateway-internal, który można znaleźć jako etykietę w usłudze mapowanej na wewnętrzny ingress, który został włączony wcześniej.
Ustaw zmienne środowiskowe dla wewnętrznego hosta i portów wejściowych.
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 w wyniku poprzedniego polecenia i upewnij się, że strona produktu przykładowej aplikacji nie jest wyświetlana. Alternatywnie możesz również użyć curl aby potwierdzić, że przykładowa aplikacja jest NIE dostępna. Na przykład:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Użyj kubectl exec , aby potwierdzić, że aplikacja jest dostępna wewnątrz 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>
Dostosowania usługi bramy ruchu przychodzącego
Adnotacje
Następujące adnotacje można dodać do usługi Kubernetes dla zewnętrznych i wewnętrznych bram wejściowych.
-
external-dns.alpha.kubernetes.io/hostname: do określania domeny dla rekordów DNS zasobu. Aby uzyskać więcej informacji, zobacz external-dns. -
service.beta.kubernetes.io/azure-allowed-ip-ranges: do określania listy dozwolonych zakresów adresów IP rozdzielonych przecinkami. -
service.beta.kubernetes.io/azure-allowed-service-tags: w celu określenia, z których tagów usługowych brama ingresowa może odbierać żądania. -
service.beta.kubernetes.io/azure-disable-load-balancer-floating-ip: ustaw natrueaby wyłączyć pływający adres IP w regule równoważenia obciążenia. -
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: nazwa podsieci, z która ma być powiązana wewnętrzna brama ruchu przychodzącego. Ta podsieć musi istnieć w tej samej sieci wirtualnej co siatka. -
service.beta.kubernetes.io/azure-load-balancer-ipv4: do konfigurowania statycznego adresu IPv4. -
service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset: do kontrolowania, czy usługa Azure Load Balancer włącza resetowanie protokołu TCP. -
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-load-balancer-tcp-idle-timeout: do konfigurowania limitu czasu bezczynności protokołu TCP w minutach dla połączeń za pośrednictwem usługi Azure Load Balancer. -
service.beta.kubernetes.io/azure-pip-ip-tags: w celu określenia listy elementów IpTag rozdzielonych przecinkami. -
service.beta.kubernetes.io/azure-pip-name: do określania nazwy publicznego adresu IP. -
service.beta.kubernetes.io/azure-shared-securityrule: do uwidaczniania bramy ruchu przychodzącego za pomocą rozszerzonej reguły zabezpieczeń.
Dodatek obsługuje adnotacje sondy kondycji dla portów 80 i 443. Dowiedz się więcej o użyciu portów tutaj.
Zasady ruchu zewnętrznego
Dodatek obsługuje dostosowywanie .spec.externalTrafficPolicy w usłudze Kubernetes dla bramy wejściowej. Ustawienie .spec.externalTrafficPolicy na Local zachowuje źródłowy adres IP klienta na bramie wejściowej Istio i unika drugiego przeskoku w ścieżce ruchu do zasobników bramy wejściowej zaplecza.
kubectl patch service aks-istio-ingressgateway-external -n aks-istio-ingress --type merge --patch '{"spec": {"externalTrafficPolicy": "Local"}}'
Uwaga
Modyfikowanie .spec.externalTrafficPolicy na Local wiąże się z ryzykiem potencjalnie niezrównoważonego rozprzestrzeniania się ruchu. Przed zastosowaniem tej zmiany zaleca się przeczytanie dokumentacji platformy Kubernetes w celu zrozumienia kompromisów między różnymi externalTrafficPolicy ustawieniami.
Usuwanie zasobów
Jeśli chcesz wyczyścić zewnętrzne lub wewnętrzne bramy ruchu przychodzącego Istio, ale zostawić siatkę włączoną 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ług Istio i zasoby Ingress (pozostawiając klaster w nienaruszonym stanie), 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ępują 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
- Konfigurowanie ingressu dla dodatku Istio service mesh przy użyciu API bramy Kubernetes
- Bezpieczna brama wejściowa dla dodatku Istio
- Konfigurowanie poziomego autoskalera podów dla wejściowej bramy (HPA)
- Wdrażanie bram ruchu wychodzącego dla dodatku usługi Istio Service Mesh