All Products
Search
Document Center

Container Service for Kubernetes:Akses pod secara langsung menggunakan aturan DNAT Gateway NAT

Last Updated:Mar 07, 2026

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 portRangeStart dan portRangeEnd dalam 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 true atau biarkan kosong ("") untuk mengaktifkan fitur tersebut. Untuk menonaktifkan fitur DNAT, hapus semua anotasi terkait DNAT.

k8s.aliyun.com/pod-dnat-expose-port

Port listening pod. Untuk menentukan beberapa port, pisahkan dengan koma. Contoh: "80,443".

k8s.aliyun.com/pod-dnat-expose-protocol

Jenis protokol. Nilai yang valid adalah tcp dan udp. Nilai default-nya adalah tcp.

k8s.aliyun.com/pod-dnat-fixed

Mengaktifkan persistensi konfigurasi untuk kontainer stateful.

Penting

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

  1. Masuk ke Konsol Manajemen Layanan Container atau . Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi sebelah kiri, klik Cluster Information.

  3. Di tab Basic Information pada halaman Cluster Information, klik tautan di sebelah kanan Worker RAM Role.

  4. 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": {}
        }
  5. 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)

  1. 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
  2. Jalankan perintah berikut untuk membaca informasi alokasi dari poddnats.alibabacloud.com dan mendapatkan alamat eksternal serta port pod.

    kubectl get poddnats -oyaml 

    Output 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: tcp

    Alamat eksternal dan port pod dijelaskan sebagai berikut:

    • externalIP: Alamat IP publik Gateway NAT. Ini adalah alamat untuk akses eksternal. Dalam contoh ini, nilainya adalah 114.55.**.**.

    • externalPort: Port publik. Controller mengalokasikan port ini dari rentang port yang ditentukan. Dalam contoh ini, nilainya adalah "512".