Ingress eksternal atau internal Azure Kubernetes Service (AKS) untuk penyebaran add-on jala layanan Istio
Artikel ini menunjukkan cara menyebarkan ingress eksternal atau internal untuk add-on jala layanan Istio untuk kluster Azure Kubernetes Service (AKS).
Catatan
Saat melakukan peningkatan revisi kecil add-on Istio, penyebaran lain untuk gateway eksternal / internal akan dibuat untuk revisi sarana kontrol baru.
Prasyarat
Panduan ini mengasumsikan Anda mengikuti dokumentasi untuk mengaktifkan add-on Istio pada kluster AKS, menyebarkan aplikasi sampel, dan mengatur variabel lingkungan.
Mengaktifkan gateway ingress eksternal
Gunakan az aks mesh enable-ingress-gateway
untuk mengaktifkan ingress Istio yang dapat diakses secara eksternal pada kluster AKS Anda:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type external
Gunakan kubectl get svc
untuk memeriksa layanan yang dipetakan ke gateway ingress:
kubectl get svc aks-istio-ingressgateway-external -n aks-istio-ingress
Amati dari output bahwa alamat IP eksternal layanan adalah alamat IP eksternal yang dapat diakses publik:
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
Catatan
Kustomisasi ke alamat IP di gateway internal dan eksternal belum didukung. Kustomisasi alamat IP pada spesifikasi ingress dikembalikan oleh add-on Istio. Direncanakan untuk memungkinkan penyesuaian ini dalam implementasi GATEWAY API untuk add-on Istio di masa mendatang.
Aplikasi tidak dapat diakses dari luar kluster secara default setelah mengaktifkan gateway ingress. Untuk membuat aplikasi dapat diakses, petakan contoh ingress penyebaran ke gateway masuk Istio menggunakan manifes berikut:
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
Catatan
Pemilih yang digunakan dalam objek Gateway menunjuk ke istio: aks-istio-ingressgateway-external
, yang dapat ditemukan sebagai label pada layanan yang dipetakan ke ingress eksternal yang diaktifkan sebelumnya.
Atur variabel lingkungan untuk host dan port ingress eksternal:
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
Ambil alamat eksternal aplikasi sampel:
echo "http://$GATEWAY_URL_EXTERNAL/productpage"
Navigasikan ke URL dari output perintah sebelumnya dan konfirmasikan bahwa halaman produk aplikasi sampel ditampilkan. Atau, Anda juga dapat menggunakan curl
untuk mengonfirmasi aplikasi sampel dapat diakses. Contohnya:
curl -s "http://${GATEWAY_URL_EXTERNAL}/productpage" | grep -o "<title>.*</title>"
Konfirmasikan bahwa halaman produk aplikasi sampel dapat diakses. Output yang diharapkan adalah:
<title>Simple Bookstore App</title>
Mengaktifkan gateway ingress internal
Gunakan az aks mesh enable-ingress-gateway
untuk mengaktifkan ingress Istio internal pada kluster AKS Anda:
az aks mesh enable-ingress-gateway --resource-group $RESOURCE_GROUP --name $CLUSTER --ingress-gateway-type internal
Gunakan kubectl get svc
untuk memeriksa layanan yang dipetakan ke gateway ingress:
kubectl get svc aks-istio-ingressgateway-internal -n aks-istio-ingress
Amati dari output bahwa alamat IP eksternal layanan bukan alamat IP yang dapat diakses publik dan sebaliknya hanya dapat diakses secara lokal:
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
Setelah mengaktifkan gateway ingress, aplikasi perlu diekspos melalui gateway dan aturan perutean perlu dikonfigurasi dengan sesuai. Gunakan manifes berikut untuk memetakan ingress penyebaran sampel ke gateway masuk 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
Catatan
Pemilih yang digunakan dalam objek Gateway menunjuk ke istio: aks-istio-ingressgateway-internal
, yang dapat ditemukan sebagai label pada layanan yang dipetakan ke ingress internal yang diaktifkan sebelumnya.
Atur variabel lingkungan untuk host dan port ingress 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
Ambil alamat aplikasi sampel:
echo "http://$GATEWAY_URL_INTERNAL/productpage"
Navigasikan ke URL dari output perintah sebelumnya dan konfirmasikan bahwa halaman produk aplikasi sampel TIDAK ditampilkan. Atau, Anda juga dapat menggunakan curl
untuk mengonfirmasi aplikasi sampel TIDAK dapat diakses. Contohnya:
curl -s "http://${GATEWAY_URL_INTERNAL}/productpage" | grep -o "<title>.*</title>"
Gunakan kubectl exec
untuk mengonfirmasi aplikasi dapat diakses dari dalam jaringan virtual kluster:
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>"
Konfirmasikan bahwa halaman produk aplikasi sampel dapat diakses. Output yang diharapkan adalah:
<title>Simple Bookstore App</title>
Kustomisasi anotasi layanan gateway Ingress
Anotasi berikut dapat ditambahkan ke layanan Kubernetes untuk gateway ingress eksternal dan internal:
service.beta.kubernetes.io/azure-load-balancer-internal-subnet
: untuk mengikat gateway ingress internal ke subnet tertentu.service.beta.kubernetes.io/azure-shared-securityrule
: untuk mengekspos gateway ingress melalui aturan keamanan tambahan.service.beta.kubernetes.io/azure-allowed-service-tags
: untuk menentukan tag layanan mana gateway ingress dapat menerima permintaan.service.beta.kubernetes.io/azure-load-balancer-ipv4
: untuk mengonfigurasi alamat IPv4 statis.service.beta.kubernetes.io/azure-load-balancer-resource-group
: untuk menentukan grup sumber daya IP publik dalam grup sumber daya yang berbeda dari kluster.service.beta.kubernetes.io/azure-pip-name
: untuk menentukan nama alamat IP publik.
Menghapus sumber daya
Jika Anda ingin membersihkan gateway ingress eksternal atau internal Istio, tetapi biarkan jala diaktifkan pada kluster, jalankan perintah berikut:
az aks mesh disable-ingress-gateway --ingress-gateway-type <external/internal> --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Jika Anda ingin membersihkan jala layanan Istio dan ingress (meninggalkan kluster), jalankan perintah berikut:
az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Jika Anda ingin membersihkan semua sumber daya yang dibuat dari dokumen panduan Istio, jalankan perintah berikut:
az group delete --name ${RESOURCE_GROUP} --yes --no-wait
Langkah berikutnya
Catatan
Jika ada masalah yang dihadapi dengan penyebaran gateway masuk Istio atau mengonfigurasi perutean lalu lintas masuk, lihat artikel tentang pemecahan masalah gateway ingress add-on Istio
Azure Kubernetes Service