Pada skenario seperti game dan aplikasi peer-to-peer (P2P), klien sering kali perlu mengakses pod secara langsung. Secara tradisional, Anda dapat menetapkan elastic IP addresses (EIPs) ke pod untuk mengaktifkan akses tersebut. Namun, metode ini memiliki beberapa kelemahan, seperti batasan jumlah EIP dan tantangan dalam manajemen keamanan. Sebagai alternatif, Anda dapat mengonfigurasi EIP pada NAT Gateway dan memanfaatkan fitur Destination Network Address Translation (DNAT) untuk memaparkan titik akhir akses pod. Pendekatan ini membantu mengurangi jumlah EIP yang digunakan.
Prasyarat
-
Kluster ACK yang dikelola atau Cluster khusus ACK telah dibuat. Kluster tersebut harus menggunakan Terway sebagai plug-in jaringan. Untuk informasi selengkapnya, lihat Buat kluster ACK yang dikelola dan Buat cluster khusus ACK (pembuatan baru dihentikan).
-
Gateway NAT telah dibuat di VPC, dan controller natgw digunakan. Untuk informasi selengkapnya tentang cara membuat Gateway NAT, lihat Internet NAT Gateway.
-
Aturan DNAT telah dibuat untuk memetakan alamat IP publik, port publik, port pribadi, dan alamat IP pribadi. Untuk informasi selengkapnya tentang cara kerja DNAT, lihat Gunakan fitur DNAT Internet NAT gateway agar instance ECS dapat menyediakan layanan melalui internet.
-
Alamat IP publik: EIP yang dikonfigurasi pada Internet NAT gateway.
-
Port publik: Port dalam rentang yang ditentukan oleh parameter
portRangeStartdanportRangeEnddalam file konfigurasi controller natgw. Port ini dialokasikan secara otomatis oleh controller natgw. Setelah port dialokasikan, informasinya dicatat dalam Custom Resource (CR)poddnats.alibabacloud.com. CR tersebut memiliki nama yang sama dengan pod. -
Port pribadi: Port listening pod yang dikonfigurasi dalam anotasi pod.
-
Alamat IP pribadi: Alamat IP pod.
-
Batasan
-
Fitur ini mendukung node ECS reguler tetapi tidak mendukung instans ECI.
-
Jumlah entri yang dapat dikonfigurasi dibatasi oleh Gateway NAT. Untuk informasi selengkapnya tentang batasan tersebut, lihat FAQ fitur DNAT.
Anotasi pod
Anda dapat menggunakan anotasi pod berikut:
|
Anotasi Pod |
Nilai |
|
k8s.aliyun.com/pod-dnat |
Mengaktifkan fitur DNAT untuk pod. Tetapkan nilai ke |
|
k8s.aliyun.com/pod-dnat-expose-port |
Port listening pod. Untuk menentukan beberapa port, pisahkan dengan koma. Contoh: |
|
k8s.aliyun.com/pod-dnat-expose-protocol |
Jenis protokol. Nilai yang valid adalah |
|
k8s.aliyun.com/pod-dnat-fixed |
Mengaktifkan persistensi konfigurasi untuk kontainer stateful. |
Konfigurasi grup keamanan: Tambahkan aturan masuk ke grup keamanan pod untuk mengizinkan traffic pada port yang terbuka.
Aktifkan fitur DNAT di ack-extend-network-controller
Komponen ack-extend-network-controller perlu mengakses Alibaba Cloud OpenAPI untuk membuat sumber daya. Untuk melakukan hal ini, Anda harus mengonfigurasi izin yang diperlukan di RAM dan menginstal komponen ack-extend-network-controller dari pasar. Setelah itu, Anda dapat menggunakan anotasi untuk membuat dan mengasosiasikan aturan DNAT untuk pod tertentu.
Langkah 1: Konfigurasikan izin RAM yang diperlukan untuk DNAT
Kluster ACK
Masuk ke Konsol Manajemen Layanan Container atau . Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik Cluster Information.
-
Di tab Basic Information pada halaman Cluster Information, klik tautan di sebelah kanan Worker RAM Role.
-
Buat kebijakan kustom yang berisi konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Buat kebijakan kustom.
{ "Effect": "Allow", "Action": [ "ecs:DescribeNetworkInterfaces", "vpc:DescribeNatGateways", "vpc:DescribeForwardTableEntries", "vpc:CreateForwardEntry", "vpc:DescribeEipAddresses", "vpc:DeleteForwardEntry", "vpc:DescribeRouteTableList", "vpc:DescribeRouteEntryList" ], "Resource": [ "*" ], "Condition": {} } -
Berikan izin kepada Worker RAM Role kluster. Untuk informasi selengkapnya, lihat Langkah 2: Berikan izin kepada Worker RAM Role kluster.
Kluster ACK Serverless
Buat pasangan Kunci Akses untuk Pengguna RAM. Untuk informasi selengkapnya, lihat Buat Pengguna RAM dan Buat kebijakan kustom.
Langkah 2: Aktifkan controller natgw untuk komponen ack-extend-network-controller
Instal komponen ack-extend-network-controller dan aktifkan controller natgw. Untuk informasi selengkapnya tentang cara menginstal komponen ack-extend-network-controller, lihat Marketplace.
Parameter konfigurasi untuk controller natgw adalah sebagai berikut.
clusterID: "c11ba338192xxxxxxx" # Masukkan nilai aktual.
regionID: "cn-hangzhou" # Masukkan nilai aktual.
vpcID: "vpc-bp1rkq0zxxxxxx" # Masukkan nilai aktual.
enableControllers:
- natgw # Aktifkan DNAT.
networkController:
natGwPool:
- natgwId: "< nat gateway id. >" # ID Internet NAT gateway.
zoneId: "< nat gateway zone id. cn-hangzhou-j >" # ID zona Internet NAT gateway.
portRangeStart: 512 # Port awal.
portRangeEnd: 1024 # Port akhir.
eips:
- "<auto config all nat gateway eips if not config. 0.0.0.0 >" # EIP Internet NAT gateway. Jika Anda tidak menyetel parameter ini, semua EIP yang dikonfigurasi pada gateway akan digunakan.
credential: # Gunakan pasangan AccessKey. Untuk kluster ACK, gunakan mode Peran RAM untuk konfigurasi. Jika Anda telah memberikan izin kepada Worker RAM Role kluster di Langkah 1, Anda tidak perlu mengonfigurasi bagian ini.
accessKey: ""
accessSecret: ""
Lacak konfigurasi menggunakan Custom Resource (CR)
-
Setelah Anda membuat pod, controller akan membuat CR dengan nama yang sama dengan pod. Contoh berikut menunjukkan cara mengonfigurasi aturan DNAT untuk pod agar memaparkan port 80 pod ke jaringan publik.
apiVersion: apps/v1 kind: Deployment metadata: name: example labels: app: example spec: replicas: 1 selector: matchLabels: app: example template: metadata: labels: app: example annotations: k8s.aliyun.com/pod-dnat: "" k8s.aliyun.com/pod-dnat-expose-port: "80" spec: containers: - name: example image: nginx -
Jalankan perintah berikut untuk membaca informasi alokasi dari
poddnats.alibabacloud.comdan mendapatkan alamat eksternal serta port pod.kubectl get poddnats -oyamlOutput yang diharapkan:
apiVersion: alibabacloud.com/v1 kind: PodDNAT metadata: creationTimestamp: "20**-09-20T03:26:44Z" finalizers: - natgw-controller generation: 2 name: example-6cd498d7b-9**** namespace: default ownerReferences: - apiVersion: v1 blockOwnerDeletion: true kind: Pod name: example-6cd498d7b-9**** uid: 7af54e1c-eeb7-4fd0-b070-ff99ddbd**** resourceVersion: "357150" uid: 2fad9bb7-cc84-46b4-b6eb-5d15f06c**** spec: eni: eni-xxx externalIP: 114.55.**.** internalIP: 172.16.**.** portMapping: - externalPort: "512" internalPort: "80" protocol: tcp tableId: ngw-xxx vswitch: vsw-xxx zoneID: cn-hangzhou-k status: entries: - externalIP: 114.55.**.** externalPort: "512" forwardEntryId: fwd-xxx internalIP: 172.16.**.** internalPort: "80" ipProtocol: tcpAlamat eksternal dan port pod dijelaskan sebagai berikut:
-
externalIP: Alamat IP publik Gateway NAT. Ini adalah alamat untuk akses eksternal. Dalam contoh ini, nilainya adalah114.55.**.**. -
externalPort: Port publik. Controller mengalokasikan port ini dari rentang port yang ditentukan. Dalam contoh ini, nilainya adalah"512".
-