Untuk mengizinkan pod dalam Service Mesh (ASM) mengakses layanan eksternal, Anda dapat mengonfigurasi kebijakan akses, membuat entri layanan, atau menentukan blok CIDR untuk akses yang diintercept. Artikel ini menjelaskan cara mengakses layanan eksternal dari instance ASM. Layanan eksternal adalah layanan yang tidak terdaftar di Istio.
Konfigurasikan kebijakan untuk mengakses layanan eksternal
Di konsol ASM, Anda dapat menyetel parameter Outbound Traffic Policy untuk mengonfigurasi kebijakan akses layanan eksternal dari instance ASM.
Masuk ke konsol ASM. Klik nama instance ASM yang ingin dikonfigurasi. Di panel navigasi sisi kiri, pilih untuk melihat layanan yang didefinisikan dalam registri layanan internal Istio.
Jika parameter Outbound Traffic Policy disetel ke ALLOW_ANY, proxy sidecar di instance ASM mengizinkan semua lalu lintas keluar tanpa memeriksa tujuan. Ini memungkinkan layanan di instance ASM mengakses semua layanan eksternal, namun lalu lintas tersebut tidak dipantau atau dikendalikan.
PentingKetika parameter Outbound Traffic Policy disetel ke ALLOW_ANY dan tidak ada entri layanan yang didefinisikan untuk layanan eksternal, proxy sidecar mengizinkan lalu lintas TCP dari instance ASM ke alamat IP dan port apa pun. Namun, metode ini kurang kontrol eksplisit dan dapat menyebabkan perilaku lalu lintas yang tidak terduga, terutama jika beberapa layanan mendengarkan pada port yang sama. Untuk menghindari konflik akses, kami sangat menyarankan agar Anda tidak menggunakan metode ini untuk mengakses layanan eksternal seperti database.
Kami menyarankan Anda mendefinisikan entri layanan untuk layanan eksternal guna secara eksplisit mengontrol tujuan lalu lintas dan menghindari masalah serta konflik potensial.
Jika parameter Outbound Traffic Policy disetel ke REGISTRY_ONLY, proxy sidecar di instance ASM menolak akses ke layanan eksternal yang tidak didefinisikan dalam registri layanan instance ASM.
Masuk ke konsol ASM.
Di panel navigasi sisi kiri, pilih .
Pada halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance ASM atau klik Manage di kolom Actions.
Pada halaman detail instance ASM, pilih di panel navigasi sisi kiri.
Pada tab global halaman Sidecar Proxy Setting, klik Outbound Traffic Policy, atur parameter Outbound Traffic Policy menjadi ALLOW_ANY, lalu klik Update Settings.
Di dalam pod dengan proxy sidecar yang diinjeksikan, jalankan perintah curl -I untuk mengakses layanan HTTP atau HTTPS eksternal. Tanggapan sukses akan dikembalikan, seperti yang ditunjukkan dalam contoh berikut:
Contoh: Akses layanan HTTP eksternal. Tanggapan sukses dikembalikan.
curl -I http://www.aliyun.com/Output yang diharapkan:
HTTP/1.1 301 Moved Permanently server: envoy date: Mon, 07 Sep 2020 09:28:54 GMT content-type: text/html content-length: 239 location: https://www.aliyun.com/ eagleeye-traceid: 0be3e0a615994709353116335ea5ea timing-allow-origin: * x-envoy-upstream-service-time: 67Contoh: Akses layanan HTTPS eksternal. Tanggapan sukses dikembalikan.
curl -I https://www.aliyun.com/Output yang diharapkan:
HTTP/2 200 server: Tengine date: Mon, 07 Sep 2020 09:16:31 GMT content-type: text/html; charset=utf-8 vary: Accept-Encoding vary: Accept-Encoding strict-transport-security: max-age=31536000 x-download-options: noopen x-content-type-options: nosniff x-xss-protection: 1; mode=block x-readtime: 0 eagleeye-traceid: 0b57ff8715994701916963132ec7ad strict-transport-security: max-age=0 timing-allow-origin: *
Buat entri layanan
Jika parameter Outbound Traffic Policy dari instance ASM disetel ke REGISTRY_ONLY, jalankan perintah curl -I di dalam pod dengan proxy sidecar yang diinjeksikan untuk mengakses layanan HTTP atau HTTPS eksternal. Permintaan akan ditolak oleh proxy sidecar, seperti yang ditunjukkan dalam contoh berikut:
Contoh: Akses layanan HTTP eksternal. Permintaan ditolak.
curl -I http://www.aliyun.com/Output yang diharapkan:
HTTP/1.1 502 Bad Gateway date: Mon, 07 Sep 2020 09:25:58 GMT server: envoy transfer-encoding: chunkedContoh: Akses layanan HTTPS eksternal. Permintaan ditolak.
curl -I https://www.aliyun.com/Output yang diharapkan:
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to www.aliyun.com:443
Dalam kasus ini, Anda dapat membuat entri layanan untuk layanan eksternal guna mengizinkan akses ke layanan tersebut. Dengan metode ini, lalu lintas ke layanan eksternal dipantau dan dikendalikan oleh Istio.
Buat entri layanan.
Masuk ke konsol ASM.
Di panel navigasi sisi kiri, pilih .
Pada halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance ASM atau klik Manage di kolom Actions.
Pada halaman detail instance ASM, pilih di panel navigasi sisi kiri. Pada halaman yang muncul, klik Create from YAML.
Pada halaman Buat, pilih namespace sesuai kebutuhan, salin konten berikut ke editor kode, lalu klik Create.
Atur parameter hosts berdasarkan kebutuhan bisnis Anda. Dalam contoh ini, parameter hosts disetel ke www.aliyun.com.
apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: aliyun-com-ext spec: hosts: - 'www.aliyun.com' ports: - number: 80 name: http protocol: HTTP - number: 443 name: https protocol: HTTPS resolution: DNS location: MESH_EXTERNAL
Di dalam pod dengan proxy sidecar yang diinjeksikan, jalankan perintah curl -I untuk mengakses layanan HTTP atau HTTPS eksternal. Tanggapan sukses akan dikembalikan, seperti yang ditunjukkan dalam contoh berikut:
Contoh: Akses layanan HTTP eksternal. Tanggapan sukses dikembalikan.
curl -I http://www.aliyun.com/Output yang diharapkan:
HTTP/1.1 301 Moved Permanently server: envoy date: Mon, 07 Sep 2020 09:49:17 GMT content-type: text/html content-length: 239 location: https://www.aliyun.com/ eagleeye-traceid: 0be3e0a915994721583014504e7b31 timing-allow-origin: * x-envoy-upstream-service-time: 66Contoh: Akses layanan HTTPS eksternal. Tanggapan sukses dikembalikan.
curl -I https://www.aliyun.com/Output yang diharapkan:
HTTP/2 200 server: Tengine date: Mon, 07 Sep 2020 09:49:31 GMT content-type: text/html; charset=utf-8 vary: Accept-Encoding vary: Accept-Encoding strict-transport-security: max-age=31536000 x-download-options: noopen x-content-type-options: nosniff x-xss-protection: 1; mode=block x-readtime: 1 eagleeye-traceid: 0be3e0b115994721709577294ed9e8 strict-transport-security: max-age=0 timing-allow-origin: *
Buat layanan virtual.
Masuk ke konsol ASM.
Di panel navigasi sisi kiri, pilih .
Pada halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance ASM atau klik Manage di kolom Actions.
Pada halaman detail instance ASM, pilih di panel navigasi sisi kiri. Pada halaman yang muncul, klik Create from YAML.
Pada halaman Buat, pilih namespace sesuai kebutuhan, salin konten berikut ke editor kode, lalu klik Create.
Buat layanan virtual untuk layanan eksternal sehingga Anda dapat mengonfigurasi aturan routing untuk layanan tersebut. Dalam kode berikut, parameter fixedDelay disetel untuk menentukan bahwa setiap permintaan untuk layanan eksternal www.aliyun.com menerima tanggapan dengan latensi tetap.
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: aliyun-com-ext spec: hosts: - 'www.aliyun.com' http: - fault: delay: percent: 100 fixedDelay: 5s route: - destination: host: www.aliyun.com weight: 100
Periksa apakah aturan routing berlaku.
Pada tanggapan, nilai parameter real adalah 5.07s. Ini menunjukkan bahwa aturan routing telah berlaku.
time curl -o /dev/null -s -w "%{http_code}\n" http://www.aliyun.com/Output yang diharapkan:
301 real 0m 5.07s user 0m 0.00s sys 0m 0.00s
Intersep akses ke blok CIDR tertentu
Anda dapat mengonfigurasi proxy sidecar dalam instance ASM untuk mengintersep akses ke blok CIDR tertentu. Dengan cara ini, lalu lintas akses ke blok CIDR lain melewati proxy sidecar dan langsung dirutekan ke layanan tujuan tanpa diintersep.
Untuk instance ASM, Anda dapat menyetel parameter Addresses to Which External Access Is Redirected to Sidecar Proxy ke blok CIDR layanan kluster Kubernetes pada bidang data instance ASM. Dengan cara ini, akses ke layanan tujuan dalam kluster Kubernetes diintersep oleh proxy sidecar. Akses ke layanan tujuan di luar kluster Kubernetes melewati proxy sidecar.
Masuk ke konsol ASM.
Di panel navigasi sisi kiri, pilih .
Pada halaman Mesh Management, temukan instance ASM yang ingin dikonfigurasi. Klik nama instance ASM atau klik Manage di kolom Actions.
Pada halaman detail instance ASM, pilih di panel navigasi sisi kiri.
Pada tab global halaman Sidecar Proxy Setting, klik Enable/Disable Sidecar Proxy by Ports or IP Addresses, masukkan blok CIDR di bidang Addresses to Which External Access Is Redirected to Sidecar Proxy, lalu klik Update Settings. Dengan cara ini, akses ke blok CIDR yang ditentukan diintersep.
Anda juga dapat memasukkan blok CIDR di bidang Addresses to Which External Access Is Not Redirected to Sidecar Proxy. Dengan cara ini, akses ke semua blok CIDR kecuali blok CIDR yang ditentukan diintersep.
CatatanNilai default di bidang Alamat Tujuan Akses Eksternal yang Diredirect ke Proxy Sidecar adalah *. Ini menunjukkan bahwa akses ke semua blok CIDR diintersep. Anda dapat memasukkan blok CIDR berdasarkan kebutuhan bisnis Anda. Secara umum, Anda dapat memasukkan blok CIDR layanan kluster Kubernetes pada bidang data instance ASM.