Topik ini menjelaskan cara dengan cepat menerapkan aplikasi dalam service mesh dalam mode Ambient Mesh.
Prasyarat
Kode sampel telah diterapkan. Untuk informasi lebih lanjut, lihat Persiapan.
Anda telah mengunduh alat debug Service Mesh (ASM), istioctl, sesuai dengan sistem operasi dan platform Anda. Versi istioctl harus kompatibel dengan versi instance ASM Anda. Untuk informasi lebih lanjut, kunjungi Repositori Istio di GitHub.
Saat melakukan operasi yang disebutkan dalam topik ini, Anda mungkin perlu beralih antara konteks Kubernetes secara berulang untuk melakukan operasi pada kluster di bidang data dan bidang kontrol. Untuk menghindari kesalahan operasi, pastikan konteks saat ini benar setiap kali Anda beralih. Anda dapat menggunakan kubectx untuk menyederhanakan pergantian konteks. Untuk informasi lebih lanjut, lihat kubectx. Anda juga dapat mengaktifkan fitur menggunakan API Kubernetes dari kluster di bidang data untuk mengakses sumber daya Istio, lalu gunakan API Kubernetes dari kluster di bidang data untuk langsung melakukan operasi pada kluster di bidang kontrol.
Langkah 1: Aktifkan kebijakan otorisasi
Setelah menerapkan aplikasi dalam instance ASM dalam mode Ambient Mesh, Anda dapat menggunakan kebijakan otorisasi Lapisan 4 untuk mengamankan akses ke aplikasi tersebut. Sebagai contoh, Anda dapat mengontrol akses ke aplikasi berdasarkan identitas beban kerja klien.
Kebijakan otorisasi Lapisan 4 untuk instance ASM versi V1.22 sedang diuji menggunakan rilis canary. Kebijakan otorisasi Lapisan 4 untuk instance ASM versi V1.21 dan sebelumnya dapat digunakan secara normal. Untuk menggunakan kebijakan otorisasi Lapisan 4 untuk instance ASM versi V1.22, ajukan tiket.
Kebijakan otorisasi Lapisan 4
Buat file productpage-viewer.yaml dengan konten berikut.
File YAML digunakan untuk mendefinisikan kebijakan otorisasi yang secara eksplisit mengizinkan akun layanan aplikasi sleep dan gateway untuk memanggil layanan productpage.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - from: - source: principals: - cluster.local/ns/default/sa/sleep - cluster.local/ns/istio-system/sa/istio-ingressgatewayGunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan kebijakan otorisasi:
kubectl apply -f productpage-viewer.yamlVerifikasi apakah kebijakan otorisasi berlaku.
Jalankan perintah berikut:
kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"Output yang diharapkan:
<title>Simple Bookstore App</title>Jalankan perintah berikut:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"Output yang diharapkan:
<title>Simple Bookstore App</title>Jalankan perintah berikut:
kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"Output yang diharapkan:
command terminated with exit code 56Output di atas menunjukkan bahwa kebijakan otorisasi berlaku.
Kebijakan otorisasi Lapisan 7
Untuk instance ASM versi V1.21 dan sebelumnya
Anda dapat menggunakan Kubernetes Gateway API untuk menerapkan waypoint proxy untuk akun layanan bookinfo-productpage. Waypoint proxy ini digunakan untuk layanan productpage. Trafik yang ditujukan ke layanan productpage dirute oleh Proxy lapisan 7 ini.
Jalankan perintah berikut untuk menerapkan waypoint proxy untuk akun layanan bookinfo-productpage:
istioctl x waypoint apply --service-account bookinfo-productpageJalankan perintah berikut untuk melihat status waypoint proxy untuk layanan productpage:
kubectl get gtw bookinfo-productpage -o yamlModifikasi kebijakan otorisasi.
Salin konten berikut ke file productpage-viewer.yaml. Ini akan secara eksplisit mengizinkan akun layanan aplikasi sleep dan gateway untuk mengakses layanan productpage menggunakan permintaan GET, sementara operasi lain tidak diizinkan.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: selector: matchLabels: istio.io/gateway-name: bookinfo-productpage action: ALLOW rules: - from: - source: principals: - cluster.local/ns/default/sa/sleep - cluster.local/ns/istio-system/sa/istio-ingressgateway to: - operation: methods: ["GET"]Jalankan perintah berikut untuk menerapkan ulang kebijakan otorisasi:
kubectl apply -f productpage-viewer.yaml
Verifikasi apakah kebijakan otorisasi berlaku.
Jalankan perintah berikut:
kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" -X DELETEOutput yang diharapkan:
RBAC: access deniedJalankan perintah berikut:
kubectl exec deploy/notsleep -- curl -s http://productpage:9080/Output yang diharapkan:
RBAC: access deniedJalankan perintah berikut:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"Output yang diharapkan:
<title>Simple Bookstore App</title>Output di atas menunjukkan bahwa kebijakan otorisasi berlaku.
Untuk instance ASM versi V1.22 dan seterusnya
Untuk menggunakan kemampuan Lapisan 7 dalam mode Ambient Mesh, Anda harus terlebih dahulu mengaktifkan waypoint proxy untuk layanan atau beban kerja tertentu.
Bagaimana cara mengaktifkan waypoint proxy untuk layanan atau beban kerja tertentu?
Instance ASM versi V1.22 menyediakan metode baru untuk mengonfigurasi waypoint proxy. Anda dapat menggunakan metode ini untuk secara fleksibel mengaktifkan waypoint proxy dalam berbagai ruang lingkup. Konfigurasinya terdiri dari dua bagian:
Pertama, buat waypoint proxy dan gunakan label untuk menentukan trafik mana yang diproses oleh waypoint proxy.
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: labels: istio.io/waypoint-for: service name: waypoint namespace: default spec: gatewayClassName: istio-waypoint listeners: - name: mesh port: 15008 protocol: HBONEBidang
gatewayClassNamedari gateway ini adalahistio-waypoint, yang menunjukkan bahwa waypoint proxy dibuat.Gateway ini memiliki label khusus
istio.io/waypoint-for: service, yang menunjukkan bahwa waypoint proxy ini didedikasikan untuk trafik layanan. Selainservice, Anda juga dapat menyetel bidang istio.io/waypoint-for keworkload(didedikasikan untuk pod) atauall(layanan dan beban kerja).
Tentukan trafik mana yang akan diproses oleh waypoint proxy. Tambahkan label
istio.io/use-waypointke layanan, namespace, atau pod dan atur nilai label ini ke nama waypoint proxy yang ingin Anda gunakan.apiVersion: v1 kind: Service metadata: labels: app: httpbin service: httpbin istio.io/use-waypoint: waypoint name: httpbin namespace: default spec: ports: - name: http port: 8000 protocol: TCP targetPort: 80 selector: app: httpbin type: ClusterIP
Demonstrasi
Bagian berikutnya melanjutkan demonstrasi tentang cara menggunakan kebijakan otorisasi Lapisan 7 dalam lingkungan yang dijelaskan dalam topik ini.
Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Lalu, terapkan konten berikut dari waypoint proxy ke namespace default:
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: labels: istio.io/waypoint-for: service name: waypoint namespace: default spec: gatewayClassName: istio-waypoint listeners: - name: mesh port: 15008 protocol: HBONEGunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk menambahkan label ke layanan productpage sehingga trafik layanan productpage diproses oleh waypoint proxy:
kubectl label service productpage istio.io/use-waypoint=waypointPerbarui kebijakan otorisasi dengan konten berikut:
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: productpage-viewer namespace: default spec: targetRefs: - kind: Service group: "" name: productpage action: ALLOW rules: - from: - source: principals: - cluster.local/ns/default/sa/sleep to: - operation: methods: ["GET"]Kebijakan otorisasi baru secara eksplisit menunjukkan bahwa hanya permintaan GET dari aplikasi sleep yang diizinkan untuk mengakses layanan productpage dan semua permintaan lain ditolak.
CatatanJika kebijakan otorisasi di atas gagal diterapkan, hapus kebijakan otorisasi asli dan terapkan kembali kebijakan otorisasi di atas.
Verifikasi apakah kebijakan otorisasi berlaku.
Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk menggunakan permintaan GET untuk mengakses layanan productpage:
kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"Output yang diharapkan:
<title>Simple Bookstore App</title>Jalankan perintah berikut untuk menggunakan permintaan DELETE untuk mengakses layanan productpage:
kubectl exec deploy/sleep -- curl -XDELETE -s http://productpage:9080/Output yang diharapkan:
RBAC: access deniedJalankan perintah berikut untuk menggunakan permintaan GET untuk mengakses layanan productpage:
kubectl exec deploy/notsleep -- curl -s http://productpage:9080/Output yang diharapkan:
RBAC: access denied
Output di atas menunjukkan bahwa kebijakan otorisasi berlaku.
Langkah 2: Tentukan aturan routing Lapisan 7
Untuk instance ASM versi V1.21 dan sebelumnya
Jalankan perintah berikut untuk menerapkan waypoint proxy untuk layanan reviews, sehingga semua trafik ke layanan reviews dirute oleh waypoint proxy ini:
istioctl x waypoint apply --service-account bookinfo-reviewsBuat file reviews.yaml dengan konten berikut.
Konfigurasikan aturan routing trafik untuk mengirim 90% permintaan ke reviews-v1 dan 10% permintaan ke reviews-v2.
Jalankan perintah berikut untuk menerapkan aturan tujuan:
kubectl apply -f reviews.yamlJalankan perintah berikut untuk memverifikasi apakah 10% dari 100 permintaan dikirim ke reviews-v2:
kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://$GATEWAY_HOST/productpage | grep reviews-v.-; done"Output yang diharapkan:
<u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v2-5d99885bc9-qb5cv</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u>Output di atas menunjukkan bahwa aturan routing Lapisan 7 berlaku.
Untuk instance ASM versi V1.22 dan seterusnya
Jalankan perintah berikut untuk menerapkan waypoint proxy untuk layanan reviews, sehingga semua trafik ke layanan reviews dirute oleh waypoint proxy ini:
kubectl label service reviews istio.io/use-waypoint=waypointGunakan konten berikut untuk membuat aturan routing trafik untuk layanan reviews untuk mengirim 90% permintaan ke reviews-v1 dan 10% permintaan ke reviews-v2:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: reviews spec: host: reviews trafficPolicy: loadBalancer: simple: RANDOM subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v3 labels: version: v3 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 90 - destination: host: reviews subset: v2 weight: 10Jalankan perintah berikut untuk memverifikasi apakah 10% dari 100 permintaan dikirim ke reviews-v2:
kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://$GATEWAY_HOST/productpage | grep reviews-v.-; done"Output yang diharapkan:
<u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v2-5d99885bc9-qb5cv</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u> <u>reviews-v1-5896f547f5-48zcn</u>Output di atas menunjukkan bahwa aturan routing Lapisan 7 berlaku.
Langkah 3: Hapus sumber daya
Jalankan perintah berikut untuk menghapus sumber daya yang dibuat dalam topik ini:
istioctl x waypoint delete --service-account bookinfo-productpage
istioctl x waypoint delete --service-account bookinfo-reviews
kubectl delete authorizationpolicy productpage-viewer