All Products
Search
Document Center

Container Service for Kubernetes:Ekspos Pod dengan Aturan DNAT Gateway NAT

Last Updated:Jun 24, 2026

Pada game dan aplikasi peer-to-peer (P2P), klien sering memerlukan akses langsung ke pod. Alih-alih menetapkan alamat IP elastis (EIP) ke setiap pod—yang dibatasi oleh kuota EIP dan memperumit manajemen keamanan—petakan titik akhir publik ke pod melalui aturan DNAT Gateway NAT.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Memiliki kluster ACK yang dikelola atau kluster khusus ACK dengan Terway sebagai plugin jaringan.

  • Membuat Gateway NAT Internet di VPC kluster, yang dikelola oleh pengontrol natgw.

  • Memahami cara aturan DNAT memetakan empat nilai: IP publik (EIP pada Gateway NAT), port publik (dialokasikan secara otomatis dari portRangeStart–portRangeEnd dan dicatat dalam CR PodDNAT), port privat (port pendengar pod dari anotasi), dan IP privat (IP pod). Aturan DNAT memetakan alamat IP publik dan port ke alamat IP privat dan port.

Batasan

  • Hanya didukung pada node ECS biasa, bukan instans ECI.

  • Entri DNAT dibatasi oleh kuota Gateway NAT. Lihat FAQ fitur DNAT.

Cara kerja

ack-extend-network-controller menjalankan sub-pengontrol bernama pengontrol natgw. Saat Anda menganotasi pod untuk mengaktifkan DNAT, pengontrol natgw akan:

  1. Memilih EIP dari kumpulan EIP Gateway NAT.

  2. Mengalokasikan port publik dari rentang yang dikonfigurasi (portRangeStartportRangeEnd).

  3. Membuat entri forward DNAT yang memetakan IP publik dan port ke IP privat dan port pod.

  4. Mencatat alokasi tersebut dalam Custom Resource (CR) PodDNAT yang dinamai sesuai pod.

Setiap aturan DNAT memetakan empat nilai: alamat IP publik, port publik, alamat IP privat, dan port privat.

Pengontrol natgw secara otomatis mengalokasikan port publik dari rentang yang Anda konfigurasi. Sesuaikan ukuran rentang tersebut berdasarkan jumlah maksimum pod yang akan diekspos secara bersamaan.

Anotasi pod

Terapkan anotasi berikut pada templat pod untuk mengontrol perilaku DNAT.

Anotasi Deskripsi
k8s.aliyun.com/pod-dnat Mengaktifkan DNAT untuk pod. Tetapkan ke true atau "" untuk mengaktifkan. Untuk menonaktifkan, hapus semua anotasi terkait DNAT.
k8s.aliyun.com/pod-dnat-expose-port Port pendengar pod. Pisahkan beberapa port dengan koma. Contoh: "80,443".
k8s.aliyun.com/pod-dnat-expose-protocol Protokol. Nilai yang valid: tcp, udp. Default: tcp.
k8s.aliyun.com/pod-dnat-fixed Mengaktifkan persistensi konfigurasi untuk kontainer stateful.
Penting

Tambahkan aturan masuk ke grup keamanan pod untuk mengizinkan traffic pada port yang terbuka. Tanpa aturan ini, traffic DNAT akan dibuang di grup keamanan.

Aktifkan DNAT di ack-extend-network-controller

Pengontrol ack-extend-network-controller memanggil OpenAPI Alibaba Cloud untuk membuat resource. Berikan izin RAM yang diperlukan, instal ack-extend-network-controller dari Marketplace, dan gunakan anotasi pod untuk membuat serta mengaitkan entri DNAT.

Pengontrol natgw memanggil API Alibaba Cloud untuk mengelola entri forward NAT. Berikan izin berdasarkan jenis kluster Anda.

Kluster ACK yang dikelola atau khusus

Pengontrol natgw menggunakan Worker RAM Role kluster. Tambahkan kebijakan kustom dengan izin berikut ke Worker RAM Role.

  1. Masuk ke Konsol Manajemen Container Service. Di panel navigasi kiri, klik Konsol Manajemen Container Service Clusters.

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

  3. Pada tab Basic Information, klik tautan di samping Worker RAM Role.

  4. Buat kebijakan kustom dengan konten berikut. 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. Lampirkan kebijakan tersebut ke Worker RAM Role. Lihat Langkah 2: Berikan izin ke Worker RAM Role.

Kluster serverless ACK

Buat pasangan Kunci Akses untuk pengguna RAM dengan izin yang setara. Lihat Buat pengguna RAM dan Buat kebijakan kustom.

Langkah 2: Instal dan konfigurasi pengontrol natgw

Instal ack-extend-network-controller dari Marketplace dan aktifkan pengontrol natgw.

Konfigurasi pengontrol natgw dengan parameter berikut:

clusterID: "c11ba338192xxxxxxx"          # ID kluster Anda
regionID: "cn-hangzhou"                  # ID wilayah Anda
vpcID: "vpc-bp1rkq0zxxxxxx"              # ID VPC Anda
enableControllers:
  - natgw                                # Aktifkan pengontrol natgw

networkController:
  natGwPool:
    - natgwId: "<nat-gateway-id>"                      # ID Gateway NAT Internet
      zoneId: "<zone-id>"                              # Zona Gateway NAT, contoh: cn-hangzhou-j
      portRangeStart: 512                              # Awal rentang port publik
      portRangeEnd: 1024                               # Akhir rentang port publik
      eips:
        - "<eip-address>"                              # EIP pada Gateway NAT. Jika dihilangkan, semua EIP pada gateway akan digunakan.

credential:                              # Untuk kluster ACK yang menggunakan Worker RAM Role, abaikan bagian ini.
  accessKey: ""
  accessSecret: ""

Ekspos pod dengan DNAT

Setelah pengontrol natgw berjalan, anotasi pod untuk membuat entri DNAT secara otomatis.

  1. Terapkan Deployment dengan anotasi DNAT. Contoh ini mengekspos port 80 pod nginx.

    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. Setelah pod berjalan, pengontrol natgw membuat CR PodDNAT yang dinamai sesuai pod. Lihat alokasi tersebut:

    Field Deskripsi
    spec.externalIP Alamat IP publik Gateway NAT. Gunakan alamat ini untuk mengakses pod dari internet.
    spec.externalPort Port publik yang dialokasikan dari portRangeStartportRangeEnd. Pada contoh ini: 512.
    spec.internalIP Alamat IP privat pod.
    spec.portMapping[].internalPort Port pendengar pod. Pada contoh ini: 80.
    status.entries[].forwardEntryId ID entri forward DNAT.
    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

    Pod dapat diakses melalui 114.55.**.**:512.:512 dari internet.

Langkah selanjutnya

  • Untuk mengekspos beberapa port, tetapkan k8s.aliyun.com/pod-dnat-expose-port ke daftar yang dipisahkan koma, misalnya "80,443".

  • Untuk menggunakan UDP alih-alih TCP, tetapkan k8s.aliyun.com/pod-dnat-expose-protocol ke udp.

  • Untuk mempertahankan port publik yang sama saat pod direstart, tambahkan anotasi k8s.aliyun.com/pod-dnat-fixed.