Служба Azure Kubernetes (AKS) внешний или внутренний входящий трафик для развертывания надстройки сетки службы Istio
В этой статье показано, как развернуть внешние или внутренние входящего трафика для надстройки сетки сетки Istio для кластера Служба Azure Kubernetes (AKS).
Примечание.
При выполнении дополнительного обновления версии надстройки Istio будет создано другое развертывание для внешних или внутренних шлюзов для новой версии уровня управления.
Необходимые компоненты
В этом руководстве предполагается, что вы выполнили документацию , чтобы включить надстройку Istio в кластере AKS, развернуть пример приложения и задать переменные среды.
Включение внешнего шлюза входящего трафика
Используйте az aks mesh enable-ingress-gateway
для включения внешнего доступа к Istio ingress в кластере AKS:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Используется kubectl get svc
для проверка службы, сопоставленной с шлюзом входящего трафика:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Обратите внимание на выходные данные, что внешний IP-адрес службы является общедоступным:
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
Приложения по умолчанию недоступны извне кластера после включения шлюза входящего трафика. Чтобы сделать приложение доступным, сопоставите входящий трафик примера развертывания с шлюзом Istio ingress с помощью следующего манифеста:
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
Примечание.
Селектор, используемый в объекте istio: aks-istio-ingressgateway-external
Шлюза, указывает на то, что можно найти как метку в службе, сопоставленной с внешним входящий трафик, который был включен ранее.
Задайте переменные среды для внешнего узла и портов входящего трафика:
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
Получите внешний адрес примера приложения:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Перейдите по URL-адресу из выходных данных предыдущей команды и убедитесь, что отображается страница продукта примера приложения. Кроме того, можно также использовать curl
для подтверждения доступности примера приложения. Например:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Убедитесь, что страница продукта примера приложения доступна. Ожидаемые выходные данные:
<title>Simple Bookstore App</title>
Включение внутреннего шлюза входящего трафика
Используйте az aks mesh enable-ingress-gateway
для включения внутреннего входящего трафика Istio в кластере AKS:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Используется kubectl get svc
для проверка службы, сопоставленной с шлюзом входящего трафика:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Обратите внимание на выходные данные, что внешний IP-адрес службы не является общедоступным и вместо этого доступен только локально:
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
Приложения не сопоставляются с шлюзом входящего трафика Istio после включения шлюза входящего трафика. Используйте следующий манифест, чтобы сопоставить входящий трафик примера развертывания с шлюзом Istio ingress:
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
Примечание.
Селектор, используемый в объекте istio: aks-istio-ingressgateway-internal
Шлюза, указывает на то, что можно найти как метку в службе, сопоставленной с внутренним входящего трафика, который был включен ранее.
Задайте переменные среды для внутреннего узла и портов входящего трафика:
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
Получите адрес примера приложения:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Перейдите по URL-адресу из выходных данных предыдущей команды и убедитесь, что страница продукта примера приложения не отображается. Кроме того, можно также использовать curl
для подтверждения того, что пример приложения недоступен. Например:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Используется kubectl exec
для подтверждения доступности приложения из виртуальной сети кластера:
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>"
Убедитесь, что страница продукта примера приложения доступна. Ожидаемые выходные данные:
<title>Simple Bookstore App</title>
Удаление ресурсов
Если вы хотите очистить сетку службы Istio и входящий трафик (выход из кластера), выполните следующую команду:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Если вы хотите очистить все ресурсы, созданные из документов руководства Istio, выполните следующую команду:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait