Di Cloud Service Mesh 1.5 dan yang lebih baru, TLS bersama otomatis (mTLS otomatis) diaktifkan secara default. Dengan mTLS otomatis, proxy sidecar klien akan otomatis mendeteksi apakah server memiliki sidecar. Sidecar klien mengirim mTLS ke workload dengan sidecar dan mengirim teks biasa ke workload tanpa sidecar. Namun, layanan menerima traffic plaintext dan mTLS. Saat Anda menyuntikkan proxy file bantuan ke Pod, sebaiknya konfigurasi juga layanan Anda agar hanya menerima traffic mTLS.
Dengan Cloud Service Mesh, Anda dapat menerapkan mTLS, di luar kode aplikasi, dengan menerapkan satu file YAML. Cloud Service Mesh memberi Anda fleksibilitas untuk menerapkan kebijakan autentikasi ke seluruh mesh layanan, ke namespace, atau ke workload individual.
Mengakses Online Boutique
- Tetapkan konteks saat ini untuk - kubectlke cluster tempat Anda men-deploy Butik Online:- gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATION
- Mencantumkan layanan di namespace - frontend:- kubectl get services -n frontend- Perhatikan bahwa - frontend-externaladalah- LoadBalancer, dan memiliki alamat IP eksternal. Aplikasi contoh mencakup layanan yang merupakan load balancer sehingga dapat di-deploy di GKE tanpa Cloud Service Mesh.
- Buka aplikasi di browser Anda menggunakan alamat IP eksternal layanan - frontend-external:- http://FRONTEND_EXTERNAL_IP/
- Cloud Service Mesh memberi Anda kemampuan untuk men-deploy gateway ingress. Anda juga dapat mengakses Online Boutique menggunakan alamat IP eksternal gateway ingress. Dapatkan IP eksternal gateway. Ganti placeholder dengan informasi berikut: - GATEWAY_SERVICE_NAME : Nama layanan gateway ingress. Jika Anda men-deploy gateway contoh tanpa modifikasi, atau jika Anda men-deploy
gateway ingress default,
namanya adalah istio-ingressgateway.
- GATEWAY_NAMESPACE: Namespace tempat Anda men-deploy
gateway ingress. Jika Anda men-deploy gateway ingress default, namespace-nya adalah istio-system.
 - kubectl get service GATEWAY_NAME -n GATEWAY_NAMESPACE
- GATEWAY_SERVICE_NAME : Nama layanan gateway ingress. Jika Anda men-deploy gateway contoh tanpa modifikasi, atau jika Anda men-deploy
gateway ingress default,
namanya adalah 
- Buka tab lain di browser Anda dan kunjungi aplikasi menggunakan alamat IP eksternal gateway ingress: - http://INGRESS_GATEWAY_EXTERNAL_IP/
- Jalankan perintah berikut untuk - curllayanan- frontenddengan HTTP biasa dari Pod lain. Karena layanan berada di namespace yang berbeda, Anda perlu melakukan curl pada nama DNS layanan- frontend.- kubectl debug --image istio/base --target istio-proxy -it \ $(kubectl get pod -l app=productcatalogservice -n product-catalog -o jsonpath={.items..metadata.name}) \ -n product-catalog -- \ curl http://frontend.frontend.svc.cluster.local:80/ -o /dev/null -s -w '%{http_code}\n'- Permintaan Anda berhasil dengan status - 200, karena secara default, traffic TLS dan plaintext diterima.
Mengaktifkan TLS bersama per namespace
Anda menerapkan mTLS dengan menerapkan kebijakan PeerAuthentication dengan kubectl.
- Simpan kebijakan autentikasi berikut sebagai - mtls-namespace.yaml.- cat <<EOF > mtls-namespace.yaml apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "namespace-policy" spec: mtls: mode: STRICT EOF- Baris - mode: STRICTdalam YAML mengonfigurasi layanan agar hanya menerima mTLS. Secara default,- modeadalah- PERMISSIVE, yang mengonfigurasi layanan untuk menerima teks biasa dan mTLS.
- Terapkan kebijakan autentikasi untuk mengonfigurasi semua layanan Online Boutique agar hanya menerima mTLS: - for ns in ad cart checkout currency email frontend loadgenerator \ payment product-catalog recommendation shipping; do kubectl apply -n $ns -f mtls-namespace.yaml done- Output yang diharapkan: - peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created peerauthentication.security.istio.io/namespace-policy created 
- Buka tab di browser Anda yang mengakses Butik Online menggunakan alamat IP eksternal layanan - frontend-external:- http://FRONTEND_EXTERNAL_IP/
- Muat ulang halaman. Browser menampilkan error berikut:  - Memuat ulang halaman akan menyebabkan teks biasa dikirim ke layanan - frontend. Karena kebijakan otentikasi- STRICT, proxy sidecar memblokir permintaan ke layanan.
- Buka tab di browser Anda yang mengakses Butik Online menggunakan alamat IP eksternal - istio-ingressgateway, lalu muat ulang halaman, yang ditampilkan dengan berhasil. Saat Anda mengakses Butik Online menggunakan gateway ingress, permintaan akan mengambil jalur berikut:- Alur autentikasi mTLS: - Browser mengirimkan permintaan HTTP teks biasa ke server.
- Container proxy gateway ingress mencegat permintaan.
- Proxy gateway masuk melakukan handshake TLS dengan proxy sisi server (layanan frontend dalam contoh ini). Proses handshake ini mencakup pertukaran sertifikat. Sertifikat ini telah dimuat sebelumnya ke dalam container proxy oleh Cloud Service Mesh.
- Proxy gateway ingress melakukan pemeriksaan penamaan yang aman pada sertifikat server, yang memverifikasi bahwa identitas yang sah menjalankan server.
- Gateway masuk dan proxy server membuat koneksi TLS dua arah, dan proxy server meneruskan permintaan ke penampung aplikasi server (layanan frontend).
 
- Jalankan perintah berikut untuk - curllayanan- frontenddengan HTTP biasa dari Pod lain.- kubectl exec testcurl -n default -- curl \ http://frontend.frontend.svc.cluster.local:80/ -o /dev/null -s -w '%{http_code}\n'- Permintaan Anda gagal karena kami mengirim traffic teks biasa dari workload tanpa sidecar yang menerapkan kebijakan - peerAuthenticationSTRICT.
Menemukan dan menghapus kebijakan autentikasi
- Untuk mengetahui daftar semua kebijakan - PeerAuthenticationdi service mesh:- kubectl get peerauthentication --all-namespaces- Outputnya mirip dengan hal berikut ini: - NAMESPACE NAME MODE AGE ad namespace-policy STRICT 17m cart namespace-policy STRICT 17m checkout namespace-policy STRICT 17m currency namespace-policy STRICT 17m email namespace-policy STRICT 17m frontend namespace-policy STRICT 17m loadgenerator namespace-policy STRICT 17m payment namespace-policy STRICT 17m product-catalog namespace-policy STRICT 17m recommendation namespace-policy STRICT 17m shipping namespace-policy STRICT 17m
- Hapus kebijakan autentikasi dari semua namespace Online Boutique: - for ns in ad cart checkout currency email frontend loadgenerator payment \ product-catalog recommendation shipping; do kubectl delete peerauthentication -n $ns namespace-policy done;- Output yang diharapkan: - peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted peerauthentication.security.istio.io "namespace-policy" deleted
- Akses Online Boutique menggunakan alamat IP eksternal layanan - frontend-external, lalu muat ulang halaman. Halaman ditampilkan seperti yang diharapkan.
- Jalankan perintah berikut untuk - curllayanan- frontenddengan HTTP biasa dari Pod lain.- kubectl debug --image istio/base --target istio-proxy -it \ $(kubectl get pod -l app=productcatalogservice -n product-catalog -o jsonpath={.items..metadata.name}) \ -n product-catalog -- \ curl http://frontend.frontend.svc.cluster.local:80/ -o /dev/null -s -w '%{http_code}\n'- Permintaan Anda berhasil dengan status - 200, karena secara default, traffic TLS dan plaintext diterima.
Jika Anda memuat ulang halaman di konsol Google Cloud yang menampilkan daftar
Workloads, halaman tersebut kini menampilkan bahwa status mTLS adalah Permissive.
Mengaktifkan TLS bersama per beban kerja
Untuk menetapkan kebijakan PeerAuthentication untuk beban kerja tertentu, Anda harus mengonfigurasi
bagian selector dan menentukan label yang cocok dengan beban kerja yang diinginkan.
Namun, Cloud Service Mesh tidak dapat menggabungkan kebijakan tingkat workload untuk traffic mTLS keluar ke layanan. Anda perlu mengonfigurasi aturan tujuan untuk mengelola
perilaku tersebut.
- Menerapkan kebijakan autentikasi ke workload tertentu. Perhatikan bagaimana kebijakan berikut menggunakan label dan pemilih untuk menargetkan deployment - frontendtertentu.- cat <<EOF | kubectl apply -n frontend -f - apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "frontend" namespace: "frontend" spec: selector: matchLabels: app: frontend mtls: mode: STRICT EOF- Output yang diharapkan: - peerauthentication.security.istio.io/frontend created 
- Konfigurasi aturan tujuan yang cocok. - cat <<EOF | kubectl apply -n frontend -f - apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule" metadata: name: "frontend" spec: host: "frontend.demo.svc.cluster.local" trafficPolicy: tls: mode: ISTIO_MUTUAL EOF- Output yang diharapkan: - destinationrule.networking.istio.io/frontend created 
- Akses Online Boutique menggunakan alamat IP eksternal layanan - frontend-external, lalu muat ulang halaman. Halaman tidak ditampilkan karena- frontend servicedisetel ke mTLS- STRICT, dan proxy sidecar memblokir permintaan.
- Jalankan perintah berikut untuk - curllayanan- frontenddengan HTTP biasa dari Pod lain.- kubectl exec testcurl -n default -- curl \ http://frontend.frontend.svc.cluster.local:80/ -o /dev/null -s -w '%{http_code}\n'- Permintaan Anda gagal karena kami mengirim traffic teks biasa dari workload tanpa sidecar yang menerapkan kebijakan - peerAuthenticationSTRICT.
- Hapus kebijakan autentikasi: - kubectl delete peerauthentication -n frontend frontend- Output yang diharapkan: - peerauthentication.security.istio.io "frontend" deleted
- Hapus aturan tujuan: - kubectl delete destinationrule -n frontend frontend- Output yang diharapkan: - destinationrule.networking.istio.io "frontend" deleted
Menerapkan mTLS di seluruh mesh
Untuk mencegah semua layanan Anda di mesh menerima traffic teks biasa, tetapkan
kebijakan PeerAuthentication di seluruh mesh dengan mode mTLS yang ditetapkan ke STRICT.
Kebijakan PeerAuthentication di seluruh mesh tidak boleh memiliki pemilih dan harus diterapkan di namespace root, istio-system. Saat Anda men-deploy kebijakan, bidang kontrol akan otomatis menyediakan sertifikat TLS sehingga beban kerja dapat saling mengautentikasi.
- Menerapkan mTLS di seluruh mesh: - kubectl apply -f - <<EOF apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "mesh-wide" namespace: "istio-system" spec: mtls: mode: STRICT EOF- Output yang diharapkan: - peerauthentication.security.istio.io/mesh-wide created 
- Akses Online Boutique menggunakan alamat IP eksternal layanan - frontend-external, lalu muat ulang halaman. Halaman tidak ditampilkan.
- Jalankan perintah berikut untuk - curllayanan- frontenddengan HTTP biasa dari Pod lain.- kubectl exec testcurl -n default -- curl \ http://frontend.frontend.svc.cluster.local:80/ -o /dev/null -s -w '%{http_code}\n'- Permintaan Anda gagal karena kami mengirim traffic teks biasa dari workload tanpa sidecar yang menerapkan kebijakan - peerAuthenticationSTRICT.
- Hapus kebijakan - mesh-wide:- kubectl delete peerauthentication -n istio-system mesh-wide- Output yang diharapkan: - peerauthentication.security.istio.io "mesh-wide" deleted