All Products
Search
Document Center

Container Service for Kubernetes:Menyambungkan EIP independen ke pod

Last Updated:Aug 21, 2026

Di kluster Kubernetes, alamat IP pod biasanya bersifat privat. Terway dan ack-extend-network-controller mendukung pengaitan Elastic IP Address (EIP) secara langsung ke pod sehingga pod tersebut memiliki egress publik independen tanpa berbagi lalu lintas dengan pod lain.

Prasyarat

Gunakan Kluster ACK yang dikelola atau Kluster Edisi Khusus ACK dengan plugin jaringan Terway. Untuk membuat kluster, lihat Membuat Kluster ACK yang Dikelola dan Membuat Kluster Edisi Khusus ACK (Pembuatan kluster baru tidak lagi didukung). Untuk mode jaringan Terway, lihat Menggunakan plugin jaringan Terway.

Penting

Sejak November 2023, Terway tidak lagi memelihara fitur EIP; versi v1.7.0 telah menghapusnya. Gunakan ack-extend-network-controller untuk menyambungkan EIP independen ke pod. Lihat Migrasi fitur EIP dari Terway ke ack-extend-network-controller.

Batasan

  • Sebelum menggunakan EIP, tinjau batasan-batasannya. Lihat Batasan.

  • Fitur ini hanya didukung pada node ECS.

  • Add-on mengelola siklus hidup EIP yang dibuat oleh controller. Jika Anda menguninstal komponen setelah menetapkan EIP ke pod, EIP tetap dialokasikan dan tidak dilepas secara otomatis.

    Sebelum menghentikan komponen, hapus pod yang menggunakan EIP. Periksa status alokasi dan pelepasan EIP dengan memeriksa resource podeips.alibabacloud.com yang sesuai dengan nama pod. Pastikan EIP tidak lagi digunakan sebelum menonaktifkan fitur EIP, atau penagihan EIP akan terus berjalan.

Penagihan

Terway dan ack-extend-network-controller gratis untuk diaktifkan, tetapi sumber daya cloud yang dikonsumsinya dikenai biaya. Lihat Penagihan untuk sumber daya cloud untuk detail penagihan ACK.

Latar Belakang

Dalam mode jaringan Terway, pod biasanya mengakses jaringan publik melalui host SNAT atau external SNAT melalui EIP, dengan layanan LoadBalancer yang mengarahkan lalu lintas masuk. Beberapa skenario memerlukan alamat IP publik independen. Contohnya:

  • Pod mengekspos layanan pada port acak, umum pada aplikasi berbasis UDP seperti server game dan telekonferensi. Misalnya, RTSP menggunakan port berbeda untuk setiap klien.

  • Pod memerlukan egress publik khusus untuk menghindari persaingan dengan pod lain.

Langkah 1: Konfigurasikan izin RAM untuk EIP

ack-extend-network-controller (Direkomendasikan)

  • Berikan izin RAM ke kluster ACK yang dikelola atau kluster Edisi Khusus ACK

    1. Buat kebijakan izin kustom dengan konten berikut. Lihat Langkah 1: Membuat kebijakan izin kustom.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:AllocateEipAddressPro",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp",
              "vpc:TagResources",
              "ecs:DescribeNetworkInterfaces"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Berikan izin ke peran RAM worker kluster. Lihat Langkah 2: Memberikan izin ke peran RAM worker kluster.

Terway

Terway memerlukan izin terkait EIP dan konfigurasi tambahan untuk menetapkan EIP ke pod.

  • Berikan izin RAM ke kluster ACK yang dikelola atau kluster ACK dasar yang dikelola yang dibuat pada atau setelah Juni 2020

    1. Buat kebijakan izin kustom dengan konten berikut. Lihat Langkah 1: Membuat kebijakan izin kustom.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Berikan izin ke peran RAM worker kluster. Lihat Langkah 2: Memberikan izin ke peran RAM worker kluster.

  • Berikan izin RAM ke kluster Edisi Khusus ACK atau kluster ACK yang dikelola yang dibuat sebelum Juni 2020

    1. Buat kebijakan izin kustom dengan konten berikut. Lihat Langkah 1: Membuat kebijakan izin kustom.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Pada tab Policies halaman peran RAM AliyunCSManagedNetworkRole, klik Grant Permission. Kemudian, klik Custom Policy, pilih kebijakan izin kustom yang telah Anda buat, lalu klik OK.

Langkah 2: Instal atau tingkatkan plugin kluster

Peringatan

Jangan aktifkan fitur EIP di kedua komponen ack-extend-network-controller dan Terway secara bersamaan. Hal ini dapat menyebabkan alokasi EIP ganda dan kegagalan pengikatan. Gunakan ack-extend-network-controller.

Perbandingan plugin

Item

ack-extend-network-controller

Terway

Jenis kluster yang didukung

  • Kluster ACK yang Dikelola

  • Kluster Edisi Khusus ACK

  • Kluster Serverless ACK

  • Kluster ACK yang Dikelola

  • Kluster Edisi Khusus ACK

EIP statis

Didukung

Tidak didukung

Fase konfigurasi

Setelah alamat IP pod ditetapkan, controller menetapkan dan mengikat EIP.

Menetapkan dan mengikat EIP selama eksekusi CNI.

Versi yang didukung

Versi plugin v0.2.0 atau lebih baru.

Versi plugin Terway v1.0.10.280-gdc2cb6c-aliyun atau lebih baru, tetapi sebelum v1.7.0.

Menginstal atau meningkatkan plugin

Untuk ack-extend-network-controller, instal dari Marketplace dan aktifkan controller EIP. Untuk Terway, tingkatkan ke versi v1.0.10.280-gdc2cb6c-aliyun atau lebih baru.

ack-extend-network-controller (direkomendasikan)

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Marketplace > Marketplace.

  2. Pada halaman Marketplace, cari ack-extend-network-controller lalu klik aplikasi yang dituju.

  3. Pada halaman detail aplikasi, klik Deploy di pojok kanan atas.

  4. Pada panel Create, pilih kluster dan namespace, lalu klik Next.

    1. Pada halaman OK, pilih versi, konfigurasikan parameter, lalu klik OK.

      Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Tipe

      Wajib

      Deskripsi

      clusterID

      string

      Ya

      ID kluster.

      regionID

      string

      Ya

      Wilayah kluster.

      enableControllers

      []string

      Ya

      Atur ke eip untuk mengaktifkan fitur EIP.

      networkController.vpcID

      string

      Ya

      ID VPC kluster.

      networkController.eipController.maxConcurrentReconciles

      int

      Tidak

      Jumlah reconciles konkuren untuk controller EIP.

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      Tidak

      Interval, dalam menit, untuk pengumpulan sampah EIP statis.

      networkController.customStatefulWorkloadKinds

      []string

      Tidak

      Jenis controller stateful kustom.

      enableVirtualNode

      bool

      Tidak

      Mengaktifkan dukungan node virtual ECI.

      Penting

      Jika Anda mengaktifkan fitur ini, controller akan menetapkan EIP ke pod pada instans ECI. Anotasi pod yang dikonfigurasi tidak boleh sama dengan yang digunakan untuk fitur EIP yang didukung oleh ECI. Gunakan fitur ini dengan hati-hati.

      enableRRSA

      bool

      Tidak

      Mengaktifkan RRSA untuk otentikasi.

      Catatan

      Didukung oleh plugin ack-extend-network-controller v0.10.0 dan lebih baru.

      Untuk detail konfigurasi, lihat Menggunakan RRSA untuk mengonfigurasi izin RAM untuk ServiceAccount guna mengisolasi izin pod.

      rrsaRoleName

      string

      Tidak

      Nama role.

      Catatan

      Didukung oleh plugin ack-extend-network-controller v0.10.0 dan lebih baru.

      credential.accessKey

      string

      Tidak

      ID AccessKey akun dengan izin untuk menyambungkan EIP.

      Parameter ini tidak diperlukan jika Anda telah menyelesaikan pengaturan di Langkah 1: Mengonfigurasi izin RAM yang diperlukan untuk menyambungkan EIP.

      Penting

      Tidak direkomendasikan karena metode ini menyimpan informasi sensitif dalam Secret Kubernetes.

      credential.accessSecret

      string

      Tidak

      AccessKey Secret akun dengan izin untuk menyambungkan EIP.

      Parameter ini tidak diperlukan jika Anda telah menyelesaikan pengaturan di Langkah 1: Mengonfigurasi izin RAM yang diperlukan untuk menyambungkan EIP.

      Penting

      Tidak direkomendasikan karena metode ini menyimpan informasi sensitif dalam Secret Kubernetes.

      kubeClientQPS

      float32

      Tidak

      Batas QPS saat komponen mengakses API server kluster.

      Catatan

      Didukung oleh plugin ack-extend-network-controller v0.12.2 dan lebih baru.

      kubeClientBurst

      int

      Tidak

      Jumlah maksimum permintaan burst ke API server kluster.

      Catatan

      Didukung oleh plugin ack-extend-network-controller v0.12.2 dan lebih baru.

      Contoh konfigurasi:

      clusterID: "c11ba338192xxxxxxx"  
      regionID: "cn-hangzhou"      
      vpcID: "vpc-bp1rkq0zxxxxxx" 
      enableControllers:
        - eip              
      networkController:
        eipController:
          maxConcurrentReconciles: 1   
          garbageCollectionPeriodInMinutes: 1  
        customStatefulWorkloadKinds:           
        - foo
      credential:                             
        accessKey: ""
        accessSecret: ""

Untuk memperbarui versi dan parameter ack-extend-network-controller, lihat Memodifikasi Helm chart.

Terway

Jika kluster Anda menggunakan Terway, tingkatkan terway-eni atau terway-eniip ke versi yang mendukung EIP. Lihat Komponen.

Catatan

Versi plugin Terway harus v1.0.10.280-gdc2cb6c-aliyun atau lebih baru, tetapi sebelum v1.7.0. Lihat Terway untuk detail versi.

Langkah 3: Aktifkan fitur EIP

Anotasi EIP

Gunakan anotasi pod untuk mengaktifkan EIP: tetapkan secara otomatis ke pod atau kaitkan dengan EIP yang sudah ada.

Menetapkan EIP secara otomatis

Penting

Penetapan EIP otomatis dapat berulang kali membuat dan melepas EIP selama pembuatan ulang pod atau kegagalan CNI. Sebaiknya tentukan EIP yang sudah ada.

Anotasi pod

Nilai

network.alibabacloud.com/pod-with-eip

k8s.aliyun.com/pod-with-eip

Menentukan apakah akan membuat dan mengaitkan EIP secara otomatis. Nilai yang valid:

  • true: Membuat dan mengaitkan EIP secara otomatis.

  • false: Tidak membuat dan mengaitkan EIP secara otomatis.

k8s.aliyun.com/eci-with-eip (Kompatibel)

network.alibabacloud.com/eip-bandwidth

k8s.aliyun.com/eip-bandwidth

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan bandwidth puncak EIP dalam Mbps. Lihat Meminta EIP.

network.alibabacloud.com/eip-internet-charge-type

k8s.aliyun.com/eip-internet-charge-type

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan metode pengukuran EIP. Nilai yang valid:

  • PayByTraffic (default): pay-by-traffic.

  • PayByBandwidth: pay-by-bandwidth.

Lihat Meminta EIP.

k8s.aliyun.com/eip-charge-type (Kompatibel)

network.alibabacloud.com/eip-instance-charge-type

k8s.aliyun.com/eip-instance-charge-type

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan metode penagihan EIP. Nilai yang valid:

  • PostPaid: pay-as-you-go.

Lihat Meminta EIP.

Catatan

Anotasi ini hanya didukung oleh ack-extend-network-controller.

Opsi PrePaid (langganan) tidak didukung.

network.alibabacloud.com/eip-common-bandwidth-package-id

k8s.aliyun.com/eip-common-bandwidth-package-id

ID Paket Bandwidth EIP yang akan dikaitkan.

Catatan

Fitur ini memerlukan Terway v1.2.3 atau lebih baru. Tidak ada batasan versi untuk komponen ack-extend-network-controller.

network.alibabacloud.com/eip-isp

k8s.aliyun.com/eip-isp

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan jenis jalur EIP. Nilai yang valid:

  • BGP: Jalur BGP (Multi-ISP).

  • BGP_PRO: Jalur BGP (Multi-ISP) Pro.

  • Jika Anda termasuk dalam daftar izin untuk bandwidth ISP tunggal, Anda juga dapat memilih salah satu jenis berikut:

    • ChinaTelecom: China Telecom

    • ChinaUnicom: China Unicom

    • ChinaMobile: China Mobile

    • ChinaTelecom_L2: China Telecom L2

    • ChinaUnicom_L2: China Unicom L2

    • ChinaMobile_L2: China Mobile L2

  • Jika Anda menggunakan wilayah China (Hangzhou Finance), atur nilainya ke BGP_FinanceCloud.

Lihat Meminta EIP.

Catatan

Fitur ini memerlukan Terway v1.2.3 atau lebih baru. Tidak ada batasan versi untuk komponen ack-extend-network-controller.

network.alibabacloud.com/eip-public-ip-address-pool-id

k8s.aliyun.com/eip-public-ip-address-pool-id

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan ID kolam alamat IP. Lihat Kolam alamat IP untuk batasan dan prosedurnya.

Catatan

Hanya didukung oleh ack-extend-network-controller.

network.alibabacloud.com/eip-resource-group-id

k8s.aliyun.com/eip-resource-group-id

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan ID kelompok sumber daya untuk EIP. Lihat Meminta EIP.

Catatan

Didukung oleh ack-extend-network-controller v0.4.0 dan lebih baru.

network.alibabacloud.com/eip-name

k8s.aliyun.com/eip-name

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan nama EIP. Lihat Meminta EIP.

Catatan

Didukung oleh ack-extend-network-controller v0.6.0 dan lebih baru.

network.alibabacloud.com/eip-description

k8s.aliyun.com/eip-description

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan deskripsi EIP. Lihat Meminta EIP.

Catatan

Didukung oleh ack-extend-network-controller v0.6.0 dan lebih baru.

network.alibabacloud.com/eip-security-protection-types

k8s.aliyun.com/eip-security-protection-types

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan tingkat perlindungan keamanan untuk EIP. EIP dengan Anti-DDoS yang diaktifkan didukung.

  • Jika dibiarkan kosong, parameter ini secara default menggunakan Anti-DDoS Origin Basic.

  • Atur nilainya ke AntiDDoS_Enhanced untuk menggunakan Anti-DDoS Origin Pro.

Untuk menentukan beberapa tingkat perlindungan, pisahkan dengan koma (,). Lihat Meminta EIP.

Catatan

Didukung oleh ack-extend-network-controller v0.9.0 dan lebih baru.

network.alibabacloud.com/eip-tags

k8s.aliyun.com/eip-tags

Anotasi ini hanya berlaku saat membuat EIP.

Menentukan tag yang akan ditambahkan ke EIP. Nilainya harus berupa string JSON yang valid. Lihat Mengelola tag.

Contoh: k8s.aliyun.com/eip-tags: "{\"foo\":\"bar\"}".

Catatan

Didukung oleh ack-extend-network-controller v0.11.0 dan lebih baru.

Menentukan instans EIP

Tentukan ID instans EIP dalam anotasi pod untuk mengaitkan EIP yang sudah ada. Anotasi ini hanya mengikat EIP; tidak mengubah konfigurasi EIP.

Penting

Fitur ini tidak cocok untuk controller multi-replika seperti Deployment. Hanya satu pod yang dapat mereferensikan setiap instans EIP. Gunakan dengan beban kerja stateful seperti StatefulSet.

Anotasi pod

Nilai

network.alibabacloud.com/pod-eip-instanceid

k8s.aliyun.com/pod-eip-instanceid

ID instans EIP yang akan dikaitkan, misalnya, eip-bp14qxxxxxxx.

Penting

Jangan menetapkan instans EIP yang sama ke pod dengan nama berbeda. Setelah pod dihapus, controller EIP akan memutus kaitan EIP tersebut. Selama periode ini, Anda tidak dapat menggunakan instans EIP yang sama untuk pod baru. Untuk memeriksa apakah pemutusan kaitan telah selesai, pastikan resource PodEIP yang memiliki nama yang sama dengan pod tersebut tidak lagi ada.

k8s.aliyun.com/eci-eip-instanceid (Kompatibel)

Anotasi strategi rilis EIP

Strategi pelepasan ini mempertahankan EIP pod setelah pembuatan ulang. Gabungkan dengan penetapan otomatis untuk EIP persisten pada beban kerja stateful.

Penting
  • Fitur ini hanya didukung oleh ack-extend-network-controller dan hanya berlaku untuk controller replika stateful. Tidak dapat digunakan untuk controller tanpa status.

  • Jika Anda menentukan ID instans EIP, instans EIP tersebut tidak dilepas saat pod dihapus.

Anotasi pod

Nilai

network.alibabacloud.com/pod-eip-release-strategy

k8s.aliyun.com/pod-eip-release-strategy

Strategi pelepasan EIP pod. Nilai yang valid:

  • Follow (default): EIP dilepas saat pod dihapus.

  • Never: EIP tidak dihapus saat pod dihapus. Hapus resource PodEIP secara manual saat tidak lagi diperlukan.

Anda juga dapat menentukan periode retensi. Ekspresi durasi bergaya Go didukung. Misalnya, 5m30s menentukan bahwa EIP dilepas 5,5 menit setelah pod dihapus.

Mengaktifkan EIP di ack-extend-network-controller atau Terway

Mengaktifkan di ack-extend-network-controller

Catatan

ack-extend-network-controller memanggil API Alibaba Cloud untuk membuat sumber daya. Konfigurasikan izin RAM, instal komponen dari Marketplace, dan gunakan anotasi untuk membuat serta mengaitkan EIP ke pod.

Membuat dan mengaitkan EIP dengan anotasi

Gunakan anotasi manifes pod untuk membuat EIP dan mengaitkannya dengan pod. Lihat FAQ untuk detail anotasi.

  1. Buat aplikasi dan gunakan anotasi untuk membuat serta mengaitkan EIP dengan pod.

    Deployment

    Manifes ini membuat Deployment di mana ACK secara otomatis menetapkan instans EIP dengan bandwidth puncak 5 Mbps ke setiap pod.

    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-with-eip: "true"
            k8s.aliyun.com/eip-bandwidth: "5"
        spec:
          readinessGates:
          - conditionType: "k8s.aliyun.com/eip"
          containers:
          - name: example
            image: nginx

    Setelah pod dibuat, kueri resource podeips.alibabacloud.com yang memiliki nama yang sama dengan pod untuk melihat detail EIP yang ditetapkan.

    kubectl get podeip -n <namespace> <podname>  -o yaml

    Output yang diharapkan:

    apiVersion: alibabacloud.com/v1beta1
    kind: PodEIP
    metadata:
      creationTimestamp: "2023-12-15T04:25:37Z"
      finalizers:
      - podeip-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-xxx
      namespace: default
      resourceVersion: "222800"
      uid: 43xxx-f1xx-4xxx-b3xx-969faxxx
    spec:
      allocationID: eip-2ze2qe8zsxxx
      allocationType:
        releaseStrategy: Follow
        type: Auto
    status:
      eipAddress: 39.102.XX.XX
      internetChargeType: PayByTraffic
      isp: BGP
      networkInterfaceID: eni-2zeagv8f3xxxx
      podLastSeen: "2023-12-15T05:18:47Z"
      privateIPAddress: 192.168.XX.XX
      resourceGroupID: rg-acfmwxxxxxsq
      status: InUse

    StatefulSet

    Gunakan manifes berikut untuk membuat StatefulSet dengan dua pod. EIP ditetapkan secara otomatis ke setiap pod, dan strategi pelepasan diatur untuk menghapus resource PodEIP 10 menit setelah pod yang sesuai dihapus.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: example
      labels:
        app: example
    spec:
      serviceName: "example"
      replicas: 2
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/pod-with-eip: "true"
            k8s.aliyun.com/pod-eip-release-strategy: "10m"
        spec:
          containers:
          - name: example
            image: nginx

    Setelah pod dibuat, kueri resource podeips.alibabacloud.com untuk melacak informasi tentang EIP yang ditetapkan.

    kubectl get podeip -n <namespace> -o yaml

    Output yang diharapkan:

    apiVersion: v1
    items:
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T03:28:01Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-0
        namespace: default
        resourceVersion: "227221"
        uid: 79954xx-17xx-4dxx-b7xx-15b84xxx
      spec:
        allocationID: eip-2ze08metxxx
        allocationType:
          releaseAfter: 10m
          releaseStrategy: TTL
          type: Auto
      status:
        eipAddress: 39.105.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2ze4tkg4xxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        resourceGroupID: rg-acfmwxxx
        status: InUse
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T03:28:03Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-1
        namespace: default
        resourceVersion: "227222"
        uid: 1339xxxe7-97xx-46xx-9bxx-537690xxx
      spec:
        allocationID: eip-2zetwhffqxxx
        allocationType:
          releaseAfter: 10m
          releaseStrategy: TTL
          type: Auto
      status:
        eipAddress: 39.105.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2zeagv8f3wxxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        resourceGroupID: rg-acfmwqnwxxx
        status: InUse
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T04:25:37Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-5bxxx-9xx
        namespace: default
        resourceVersion: "227220"
        uid: 43cdfxxx-f1xx-42xx-b3xx-969fxxx
      spec:
        allocationID: eip-2ze2qe8zsmnxxx
        allocationType:
          releaseStrategy: Follow
          type: Auto
      status:
        eipAddress: 39.102.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2zeagv8f3wxxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        publicIpAddressPoolID: pippool-2ze498cxxx
        resourceGroupID: rg-acfmwqnxxx
        status: InUse
    kind: List
    metadata:
      resourceVersion: ""

    Setelah pod dalam aplikasi stateful ini dihapus, resource kustom PodEIP (CR)-nya dipertahankan selama 10 menit sebelum dihapus. Jika pod dengan nama yang sama dibuat selama periode ini, pod tersebut menggunakan kembali EIP yang sesuai.

  2. Verifikasi konfigurasi.

    Setelah pod berada dalam status Running, periksa anotasi k8s.aliyun.com/allocated-eipAddress untuk melihat alamat EIP yang ditetapkan dan mengakses pod.

Mengaktifkan di Terway

  1. Terapkan konfigurasi Terway untuk mendukung fitur EIP.

    1. Edit ConfigMap Terway.

      kubectl edit cm eni-config -n kube-system
    2. Di eni_conf, tambahkan baris berikut.

      "enable_eip_pool": "true"
      Catatan

      Untuk memaksa memutus kaitan EIP dari instans saat ini saat Anda mengaitkannya dengan yang baru, tambahkan parameter "allow_eip_rob": "true" ke eni_conf.

    3. Setelah selesai mengedit, tekan tombol Esc, ketik :wq!, lalu tekan tombol Enter untuk menyimpan perubahan dan keluar dari mode edit.

    4. Buat ulang pod Terway untuk menerapkan perubahan.

      kubectl delete pod -n kube-system -l app=terway-eniip # Jika Anda menginstal komponen terway-eni, ganti terway-eniip dengan terway-eni.
  2. Buat dan kaitkan EIP ke pod menggunakan anotasi.

    Gunakan anotasi manifes pod untuk membuat EIP dan mengaitkannya dengan pod. Lihat Batasan terkait EIP.

    Menetapkan EIP secara otomatis

    Tambahkan anotasi berikut untuk menetapkan EIP secara otomatis dan menentukan bandwidth:

    • k8s.aliyun.com/pod-with-eip: "true": Menetapkan EIP publik khusus ke pod.

    • k8s.aliyun.com/eip-bandwidth: "5": Menentukan bandwidth EIP. Default-nya adalah 5 Mbps.

    Contoh manifes:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          annotations:
            network.alibabacloud.com/pod-with-eip: "true" # Menetapkan EIP publik secara otomatis ke kontainer Nginx.
            network.alibabacloud.com/eip-bandwidth: "5"   # Menentukan bandwidth EIP. Default-nya adalah 5 Mbps, yang konsisten dengan nilai default EIP.
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx

    Menentukan EIP

    Penting
    • Karena satu EIP tidak dapat dikaitkan dengan beberapa pod, metode ini tidak cocok untuk beban kerja seperti Deployment dan StatefulSet yang memiliki lebih dari satu replika.

    • Secara default, jika EIP yang ditentukan sudah dikaitkan dengan instans, pengaitan akan gagal. Untuk memaksa memutus kaitan EIP dari instans sebelumnya dan mengaitkannya dengan yang baru, Anda harus mengatur "allow_eip_rob": "true" di ConfigMap seperti yang dijelaskan sebelumnya.

    • Anda hanya dapat menentukan ID instans EIP untuk beban kerja satu replika. Misalnya, Deployment tidak boleh memiliki lebih dari satu replika.

    Tambahkan anotasi berikut untuk menentukan ID instans EIP untuk pod:

    k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>"
  3. Verifikasi konfigurasi.

    Setelah pod berada dalam status Running, periksa anotasi network.alibabacloud.com/allocated-eipAddress untuk melihat alamat EIP yang ditetapkan dan mengakses pod.

FAQ

Pod siap sebelum EIP dikaitkan

Controller hanya menetapkan EIP setelah alamat IP pod dialokasikan, sehingga pod mungkin menjadi Ready sebelum EIP dikaitkan. Gunakan metode berikut untuk mengontrol waktu.

Readiness gates

Catatan

Mengonfigurasi readiness gates memerlukan ack-extend-network-controller.

Dengan readinessGates, controller hanya memperbarui kondisi pod setelah EIP dikaitkan, sehingga mencegah status Ready hingga pengikatan selesai.

kind: Pod
...
spec:
  readinessGates:
  - conditionType: "k8s.aliyun.com/eip"
status:
  conditions:
  - lastProbeTime: "2022-12-12T03:45:48Z"
    lastTransitionTime: "2022-12-12T03:45:48Z"
    reason: Associate eip succeed
    status: "True"
    type: k8s.aliyun.com/eip
...

Init container

Konfigurasikan init container untuk memverifikasi penetapan EIP.

apiVersion: v1
kind: Pod
metadata:
  name: example
  annotations:
    network.alibabacloud.com/pod-with-eip: "true"
spec:
  containers:
  - name: example
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init
    image: busybox:1.28
    command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/allocated-eipAddress=\\S?[0-9]+\\S?' /etc/podinfo/annotations; do echo waiting for annotations; sleep 2; done"]
    volumeMounts:
      - name: podinfo
        mountPath: /etc/podinfo
  volumes:
    - name: podinfo
      downwardAPI:
        items:
          - path: "labels"
            fieldRef:
              fieldPath: metadata.labels
          - path: "annotations"
            fieldRef:
              fieldPath: metadata.annotations

Pod tidak dapat diakses melalui EIP

Kebijakan ACL yang ketat sering menjadi penyebabnya. Periksa kontrol akses berikut: