Istio hizmet mesh eklentisi dağıtımı için Azure Kubernetes Service (AKS) dış veya iç girişler
Bu makalede, Azure Kubernetes Service (AKS) kümesi için Istio hizmet ağı eklentisi için dış veya iç girişlerin nasıl dağıtılacağı gösterilmektedir.
Not
Istio eklentisinin küçük bir düzeltme yükseltmesi yapılırken, yeni denetim düzlemi düzeltmesi için dış/iç ağ geçitleri için başka bir dağıtım oluşturulur.
Önkoşullar
Bu kılavuzda, AKS kümesinde Istio eklentisini etkinleştirmek, örnek bir uygulama dağıtmak ve ortam değişkenlerini ayarlamak için belgeleri izlediğiniz varsayılır.
Dış giriş ağ geçidini etkinleştirme
AKS kümenizde dışarıdan erişilebilir bir Istio girişi etkinleştirmek için kullanın az aks mesh enable-ingress-gateway
:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Giriş ağ geçidine eşlenen hizmeti denetlemek için kullanın kubectl get svc
:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Çıkışta hizmetin dış IP adresinin genel olarak erişilebilir olduğunu gözlemleyin:
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
Not
İç ve dış ağ geçitlerinde IP adresi özelleştirmeleri henüz desteklenmemektedir. Giriş belirtimlerindeki IP adresi özelleştirmeleri, Istio eklentisi tarafından geri döndürülür. Gelecekte Istio eklentisi için Ağ Geçidi API'sinde bu özelleştirmelere izin vermek planlanıyor.
Giriş ağ geçidi etkinleştirildikten sonra uygulamalara varsayılan olarak küme dışından erişilemez. Bir uygulamayı erişilebilir hale getirmek için aşağıdaki bildirimi kullanarak örnek dağıtımın girişini Istio giriş ağ geçidine eşleyin:
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
Not
Gateway nesnesinde kullanılan seçici, daha önce etkinleştirilen dış girişle eşlenen hizmette etiket olarak bulunabilen öğesine işaret istio: aks-istio-ingressgateway-external
eder.
Dış giriş konağı ve bağlantı noktaları için ortam değişkenlerini ayarlayın:
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
Örnek uygulamanın dış adresini alın:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Önceki komutun çıkışından URL'ye gidin ve örnek uygulamanın ürün sayfasının görüntülendiğini onaylayın. Alternatif olarak, örnek uygulamanın erişilebilir olduğunu onaylamak için de kullanabilirsiniz curl
. Örneğin:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Örnek uygulamanın ürün sayfasının erişilebilir olduğunu onaylayın. Beklenen çıkış:
<title>Simple Bookstore App</title>
İç giriş ağ geçidini etkinleştirme
AKS kümenizde bir iç Istio girişi etkinleştirmek için kullanın az aks mesh enable-ingress-gateway
:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Giriş ağ geçidine eşlenen hizmeti denetlemek için kullanın kubectl get svc
:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Çıkışta hizmetin dış IP adresinin genel olarak erişilebilir olmadığını ve bunun yerine yalnızca yerel olarak erişilebilir olduğunu gözlemleyin:
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
Giriş ağ geçidi etkinleştirildikten sonra uygulamaların ağ geçidi üzerinden kullanıma sunulmaları ve yönlendirme kurallarının buna göre yapılandırılması gerekir. Örnek dağıtımın girişini Istio giriş ağ geçidiyle eşlemek için aşağıdaki bildirimi kullanın:
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
Not
Ağ Geçidi nesnesinde kullanılan seçici, daha önce etkinleştirilen iç girişle eşlenen hizmette etiket olarak bulunabilen öğesini işaret eder istio: aks-istio-ingressgateway-internal
.
İç giriş konağı ve bağlantı noktaları için ortam değişkenlerini ayarlayın:
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
Örnek uygulamanın adresini alın:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Önceki komutun çıkışından URL'ye gidin ve örnek uygulamanın ürün sayfasının GÖRÜNTÜLENMEDİĞİNDEN emin olun. Alternatif olarak, örnek uygulamanın ERIŞILEBILIR DEĞİl olduğunu onaylamak için de kullanabilirsinizcurl
. Örneğin:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Uygulamanın kümenin sanal ağından erişilebilir olduğunu onaylamak için kullanın 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>"
Örnek uygulamanın ürün sayfasının erişilebilir olduğunu onaylayın. Beklenen çıkış:
<title>Simple Bookstore App</title>
Giriş ağ geçidi hizmeti ek açıklaması özelleştirmesi
Dış ve iç giriş ağ geçitleri için Kubernetes hizmetine aşağıdaki ek açıklamalar eklenebilir:
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: bir iç giriş ağ geçidini belirli bir alt ağa bağlamak için.service.beta.kubernetes.io/azure-shared-securityrule
: artırılmış bir güvenlik kuralı aracılığıyla giriş ağ geçidini kullanıma sunma.service.beta.kubernetes.io/azure-allowed-service-tags
: giriş ağ geçidinin istekleri alabileceği hizmet etiketlerini belirtmek için.service.beta.kubernetes.io/azure-load-balancer-ipv4
: statik bir IPv4 adresi yapılandırmak için.service.beta.kubernetes.io/azure-load-balancer-resource-group
: kümeden farklı bir kaynak grubunda genel IP'nin kaynak grubunu belirtmek için.service.beta.kubernetes.io/azure-pip-name
: genel IP adresinin adını belirtmek için.
Kaynakları silme
Istio dış veya iç giriş ağ geçitlerini temizlemek, ancak kümede ağı etkin bırakmak istiyorsanız aşağıdaki komutu çalıştırın:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Istio hizmet ağı ve girişlerini (kümenin arkasında bırakarak) temizlemek istiyorsanız aşağıdaki komutu çalıştırın:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Istio nasıl yapılır kılavuzu belgelerinden oluşturulan tüm kaynakları temizlemek istiyorsanız aşağıdaki komutu çalıştırın:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Sonraki adımlar
Azure Kubernetes Service