Pada instans Service Mesh (ASM) versi 1.16.4 dan yang lebih baru, Anda dapat menggunakan CustomResourceDefinition (CRD) ASMEgressTrafficPolicy untuk mendefinisikan cara gerbang keluar mengelola akses ke trafik eksternal. Dengan mengombinasikan proxy sidecar dan kebijakan otorisasi, Anda dapat meningkatkan pengaturan trafik. Topik ini menyediakan contoh YAML serta menjelaskan bidang-bidang dalam CRD ASMEgressTrafficPolicy.
Contoh YAML
Contoh 1: Izinkan akses ke layanan eksternal tertentu melalui gerbang keluar
Layanan sleep-a di namespace mytest dapat mengakses http://www.httpbin.org pada port 80 melalui gerbang keluar bernama egressgateway-a.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # Konvensi penamaan: Nama harus sama dengan nama gerbang keluar.
namespace: istio-egress # Konvensi namespace: Namespace harus istio-egress.
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org # Beberapa nama domain harus diselesaikan ke alamat IP yang sama oleh DNS.
- httpbin.org # Beberapa nama domain harus diselesaikan ke alamat IP yang sama oleh DNS.
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # Sidecar → 80 Gateway → 80 Layanan (httpbin.org)Contoh 2: Mengizinkan beberapa layanan untuk mengakses layanan eksternal tertentu melalui gateway egress dan meningkatkan permintaan HTTP menjadi permintaan HTTPS
Layanan sleep-a di namespace mytest dapat mengakses http://www.httpbin.org pada port 80 melalui gerbang keluar bernama egressgateway-a, yang kemudian meningkatkan permintaan HTTP menjadi HTTPS.
Layanan sleep-a di namespace mytest dapat mengakses https://www.httpbin.org pada port 444 melalui gerbang keluar bernama egressgateway-a.
Layanan sleep-b di namespace mytest dapat mengakses https://www.aliyun.com pada port 445 melalui gerbang keluar bernama egressgateway-a.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # Konvensi penamaan: Nama harus sama dengan nama gerbang keluar.
namespace: istio-egress # Konvensi namespace: Namespace harus istio-egress.
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: mytest
workloadSelector:
app: sleep-a
to:
- name: httpbin-service-http
hosts:
- www.httpbin.org # Beberapa nama domain harus diselesaikan ke alamat IP yang sama oleh DNS.
- httpbin.org # Beberapa nama domain harus diselesaikan ke alamat IP yang sama oleh DNS.
port:
name: http
number: 80
protocol: HTTP
byEgressGateway:
port: 80 # Sidecar → 80 Gateway → 80 Layanan (httpbin.org)
httpsUpgrade:
enabled: true # Jika enabled diatur ke false, port yang ditentukan dalam httpsUpgrade tidak berlaku.
port: 443 # Sidecar → 80 Gateway → 443 Layanan (httpbin.org)
- name: httpbin-service-https
hosts:
- www.httpbin.org
- httpbin.org
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 444
- from:
- namespace: mytest
workloadSelector:
app: sleep-b
to:
- name: aliyun-service-https
hosts:
- www.aliyun.com
port:
name: https
number: 443
protocol: HTTPS
byEgressGateway:
port: 445Contoh 3: Akses layanan eksternal melalui HTTP dan TCP serta tetapkan port gerbang keluar secara otomatis
Mulai dari versi 1.24.6.45, Anda dapat menggunakan ASMEgressTrafficPolicy untuk mengonfigurasi layanan eksternal berbasis TCP. Karena layanan TCP yang berbeda memerlukan port gerbang keluar yang berbeda, ASM mendukung penetapan otomatis port pengalihan untuk gerbang keluar. Rentang port default untuk penetapan tersebut adalah 10.000 hingga 20.000. Anda tidak perlu memodifikasi port-port ini secara manual karena tidak memengaruhi layanan Anda. Contoh kode berikut memberikan ilustrasi:
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMEgressTrafficPolicy
metadata:
name: egress-by-egressgateway-a # Konvensi penamaan: Nama harus sama dengan nama gerbang keluar.
namespace: istio-egress # Konvensi namespace: Namespace harus istio-egress.
spec:
byEgressGateway:
name: egressgateway-a
egressRules:
- from:
- namespace: default
workloadSelector:
app: sleep
to:
- name: aliyun-com-http # entri rute http
hosts:
- aliyun.com
port:
name: http
number: 80
protocol: HTTP
- name: aliyun-https # entri rute https
hosts:
- aliyun.com
port:
name: https
number: 443
protocol: HTTPS
- name: https-upgrade # http ditingkatkan menjadi https
hosts:
- taobao.com
port:
name: http
protocol: HTTP
number: 80
httpsUpgrade:
enabled: true
port: 443
- name: tcp-svc1 # svc tcp 1
hosts:
- 1.1.1.1
port:
name: tcp
protocol: TCP
number: 44
- name: tcp-svc2 # svc tcp 2
hosts:
- test-tcp.com
port:
name: tcp
protocol: TCP
number: 444Untuk mengakses layanan TCP eksternal menggunakan nama domain, pastikan fitur Proxy DNS ASM diaktifkan. Untuk informasi selengkapnya, lihat Gunakan Proxy DNS di ASM.
Deskripsi Bidang
Spec
Bidang | Tipe | Diperlukan | Deskripsi |
byEgressGateway | Ya | Gerbang keluar yang digunakan untuk mengakses layanan eksternal. | |
egressRules | Ya | Aturan trafik keluar. |
ByEgressGateway
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Ya | Nama gerbang keluar. Disarankan agar nama gerbang tidak melebihi 32 karakter.
|
port | uint32 | Tidak | Port gerbang keluar.
|
EgressRule
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Tidak | Nama aturan. |
from | From[] | Ya | Sumber trafik egress, yaitu pemula permintaan. |
to | To[] | Ya | Tujuan trafik egress, yaitu layanan target eksternal dari permintaan. |
From
Bidang | Tipe | Diperlukan | Deskripsi |
namespace | string | Ya | Namespace tempat layanan yang memulai permintaan berada. |
workloadSelector | map[string]string | Tidak | Filter yang digunakan untuk memilih layanan sumber trafik keluar berdasarkan label. |
To
Bidang | Tipe | Diperlukan | Deskripsi |
name | string | Ya | Nama layanan eksternal. |
hosts | string[] | Ya | Nama domain layanan eksternal. Anda dapat mengonfigurasi beberapa nama domain, tetapi semuanya harus mengarah ke situs yang sama. |
port | Ya | Port layanan eksternal. | |
byEgressGateway | Ya | Mengakses layanan eksternal melalui port tertentu dari gerbang keluar.
| |
httpsUpgrade | Tidak | Menentukan apakah permintaan ditingkatkan menjadi HTTPS. Permintaan HTTP yang diajukan oleh layanan untuk mengakses layanan eksternal ditingkatkan menjadi permintaan HTTPS oleh gerbang keluar. |
HttpsUpgrade
Bidang | Tipe | Diperlukan | Deskripsi |
enabled | bool | Ya | Menentukan apakah permintaan ditingkatkan menjadi HTTPS. |
port | uint32 | Ya | Port HTTPS dari layanan eksternal. |