All Products
Search
Document Center

Container Service for Kubernetes:Melampirkan EIP independen ke pod

Last Updated:Nov 11, 2025

Dalam kluster Kubernetes, pod biasanya diberi alamat IP pribadi. Namun, beberapa skenario mengharuskan pod memiliki alamat IP publik independen agar dapat berkomunikasi dengan jaringan eksternal tanpa terpengaruh oleh lalu lintas dari pod lain. Komponen Terway dan ack-extend-network-controller Alibaba Cloud mendukung pengaitan Elastic IP Address (EIP) ke pod tertentu, sehingga memberikan egress publik yang independen.

Prasyarat

Anda harus membuat Kluster ACK yang dikelola atau Cluster khusus ACK yang menggunakan plugin jaringan Terway. Untuk informasi selengkapnya, lihat Membuat Kluster ACK yang dikelola dan Membuat Cluster khusus ACK (tidak lagi tersedia untuk pembuatan). Untuk informasi lebih lanjut tentang mode jaringan Terway, lihat Menggunakan plugin jaringan Terway.

Penting

Mulai November 2023, Terway tidak lagi menyediakan pembaruan untuk fitur EIP. Fitur ini secara resmi dihapus pada v1.7.0. Kami menyarankan Anda menggunakan komponen ack-extend-network-controller untuk melampirkan EIP publik independen ke pod. Untuk informasi selengkapnya, lihat Migrasi fitur EIP dari Terway ke ack-extend-network-controller.

Batasan

  • Sebelum menggunakan EIP, Anda harus memahami batasan-batasannya. Untuk informasi selengkapnya, lihat Batasan.

  • Fitur ini hanya didukung untuk node ECS.

Penagihan

Mengaktifkan plugin Terway dan ack-extend-network-controller tidak dikenakan biaya tambahan. Namun, Anda mungkin dikenakan biaya untuk sumber daya cloud yang digunakan. Untuk informasi selengkapnya tentang penagihan sumber daya cloud ACK, lihat Biaya sumber daya cloud.

Informasi latar belakang

Dalam jaringan Terway, lalu lintas dari pod ke Internet biasanya dirutekan menggunakan Source Network Address Translation (SNAT) host atau SNAT eksternal melalui EIP. Lalu lintas Internet arah masuk ke pod umumnya mengalir melalui layanan LoadBalancer. Namun, beberapa skenario mengharuskan pod memiliki alamat IP publik independen. Misalnya:

  • Port yang dipetakan untuk pod bersifat acak. Hal ini umum terjadi pada server game berbasis User Datagram Protocol (UDP) atau panggilan konferensi. Sebagai contoh, Real-Time Streaming Protocol (RTSP) menggunakan port berbeda untuk klien yang berbeda.

  • Pod bersaing untuk lalu lintas Internet, dan pod tertentu memerlukan egress publik yang independen.

Langkah 1: Konfigurasikan izin RAM untuk melampirkan EIP

ack-extend-network-controller (disarankan)

  • Berikan izin RAM ke Kluster ACK yang dikelola atau Cluster khusus ACK

    1. Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Membuat kebijakan 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. Untuk informasi selengkapnya, lihat Langkah 2: Memberikan izin ke peran RAM Worker kluster.

Terway

Terway memerlukan izin terkait EIP untuk meminta dan mengonfigurasi EIP bagi pod. Anda harus mengonfigurasi izin tambahan.

  • Berikan izin RAM ke Kluster ACK yang dikelola atau Kluster ACK yang dikelola Edisi Dasar yang dibuat pada atau setelah Juni 2020

    1. Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Membuat kebijakan 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. Untuk informasi selengkapnya, lihat Langkah 2: Memberikan izin ke peran RAM Worker kluster.

  • Berikan izin RAM ke Cluster khusus ACK atau Kluster ACK yang dikelola yang dibuat sebelum Juni 2020

    1. Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Membuat kebijakan kustom.

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. Pada halaman Peran RAM AliyunCSManagedNetworkRole, buka tab Permissions dan klik Add Permissions. Kemudian, klik Custom Policy, pilih kebijakan kustom yang telah Anda buat pada langkah sebelumnya, lalu klik OK.

Langkah 2: Instal atau tingkatkan plugin untuk kluster

Peringatan

Jangan aktifkan kemampuan konfigurasi EIP dari ack-extend-network-controller dan Terway secara bersamaan. Hal ini dapat menyebabkan alokasi ulang sumber daya EIP dan mengakibatkan kegagalan pengikatan EIP. Kami menyarankan Anda menggunakan plugin ack-extend-network-controller.

Perbandingan plugin

Item

ack-extend-network-controller

Terway

Jenis kluster yang didukung

  • Kluster ACK yang dikelola

  • Cluster khusus ACK

  • Kluster ACK Serverless

  • Kluster ACK yang dikelola

  • Cluster khusus ACK

EIP tetap

Didukung

Tidak didukung

Fase konfigurasi

Setelah alamat IP pod dialokasikan, controller mengalokasikan dan melampirkan EIP ke pod.

EIP dialokasikan dan dilampirkan selama proses eksekusi CNI.

Versi yang didukung

v0.2.0 atau yang lebih baru

Sama dengan atau lebih baru dari v1.0.10.280-gdc2cb6c-aliyun, tetapi sebelum v1.7.0

Instal atau tingkatkan plugin

Jika Anda menggunakan plugin ack-extend-network-controller, instal dari Marketplace Aplikasi ACK dan aktifkan controller EIP. Jika Anda menggunakan plugin jaringan Terway, tingkatkan Terway ke versi v1.0.10.280-gdc2cb6c-aliyun atau yang lebih baru.

Instal ack-extend-network-controller (disarankan)

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

  2. Pada halaman App Marketplace, masukkan ack-extend-network-controller di kotak pencarian lalu klik aplikasi tersebut.

  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 konfigurasi parameter, pilih nomor versi, atur parameter, lalu klik OK.

      Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Tipe

      Wajib

      Deskripsi

      clusterID

      string

      Ya

      ID kluster.

      regionID

      string

      Ya

      ID zona tempat kluster ditempatkan.

      enableControllers

      []string

      Ya

      Atur parameter ini ke eip untuk mengaktifkan fitur EIP.

      networkController.vpcid

      string

      Ya

      ID VPC kluster.

      networkController.eipController.maxConcurrentReconciles

      int

      Tidak

      Jumlah controller EIP konkuren.

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      Tidak

      Periode pembersihan EIP tetap oleh controller EIP.

      customStatefulWorkloadKinds

      []string

      Tidak

      Kind dari controller stateful kustom.

      enableVirtualNode

      bool

      Tidak

      Menentukan apakah akan mendukung node virtual ECI.

      Penting

      Jika Anda mengaktifkan parameter ini, controller akan mengalokasikan EIP ke pod instans ECI. Anotasi pod yang Anda konfigurasi tidak boleh sama dengan fitur EIP yang didukung oleh ECI. Gunakan parameter ini dengan hati-hati.

      enableRRSA

      bool

      Tidak

      Mengotentikasi permintaan menggunakan RRSA.

      Catatan

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

      Hanya metode injeksi ack-pod-identity-webhook yang didukung untuk mengonfigurasi RRSA. Konfigurasikan label yang sesuai untuk namespace kube-system. Untuk informasi selengkapnya tentang konfigurasi, lihat Isolasi izin pod berdasarkan RRSA.

      rrsaRoleName

      string

      Tidak

      Nama peran.

      Catatan

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

      credential.accessKey

      string

      Tidak

      ID AccessKey dari akun yang memiliki izin untuk melampirkan EIP.

      Jika Anda telah menyelesaikan Langkah 1: Konfigurasikan izin RAM untuk melampirkan EIP, Anda tidak perlu mengonfigurasi parameter ini.

      Penting

      Konfigurasi ini menyimpan informasi sensitif dalam Secret Kubernetes. Metode ini tidak disarankan.

      credential.accessSecret

      string

      Tidak

      Rahasia AccessKey dari akun yang memiliki izin untuk melampirkan EIP.

      Jika Anda telah menyelesaikan Langkah 1: Konfigurasikan izin RAM untuk melampirkan EIP, Anda tidak perlu mengonfigurasi parameter ini.

      Penting

      Konfigurasi ini menyimpan informasi sensitif dalam Secret Kubernetes. Metode ini tidak disarankan.

      kubeClientQPS

      float32

      Tidak

      Batas permintaan per detik (QPS) untuk komponen saat mengakses API server kluster.

      Catatan

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

      kubeClientBurst

      int

      Tidak

      Jumlah maksimum permintaan burst untuk komponen saat mengakses API server kluster.

      Catatan

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

      Kode berikut memberikan 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 plugin ack-extend-network-controller, lihat Memodifikasi chart Helm.

Tingkatkan Terway

Pastikan kluster menggunakan plugin Terway, lalu tingkatkan plugin Terway (terway-eni atau terway-eniip) ke versi yang mendukung fitur EIP. Untuk informasi selengkapnya tentang cara meningkatkan plugin Terway, lihat Mengelola komponen.

Catatan

Versi plugin Terway harus v1.0.10.280-gdc2cb6c-aliyun atau yang lebih baru, dan lebih lama dari v1.7.0. Untuk informasi selengkapnya tentang versi plugin Terway, lihat Terway.

Langkah 3: Aktifkan fitur EIP

Pengenalan anotasi untuk mengaktifkan EIP

ACK memungkinkan Anda menggunakan anotasi untuk mengaktifkan fitur EIP. Anda dapat memilih untuk mengalokasikan EIP secara otomatis atau menetapkan EIP tetap ke pod sesuai kebutuhan Anda.

Alokasikan EIP secara otomatis

Penting

Saat menggunakan fitur alokasi EIP otomatis, sumber daya EIP mungkin diminta dan dilepas berulang kali jika pod dibuat ulang atau eksekusi Container Network Interface (CNI) gagal. Untuk mencegah masalah ini, Anda dapat menentukan instans EIP.

Anotasi Pod

Nilai

network.alibabacloud.com/pod-with-eip

k8s.aliyun.com/pod-with-eip

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

  • true: Membuat dan melampirkan EIP secara otomatis.

  • false: Tidak membuat dan melampirkan EIP secara otomatis.

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

network.alibabacloud.com/eip-bandwidth

k8s.aliyun.com/eip-bandwidth

Hanya didukung saat Anda membuat EIP.

Bandwidth puncak EIP. Satuan: Mbit/s. Untuk informasi selengkapnya, lihat Meminta EIP.

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

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

Hanya didukung saat Anda membuat EIP.

Metode pengukuran EIP. Nilai yang valid:

  • PayByTraffic (default): bayar-per-lalu-lintas.

  • PayByBandwidth: bayar-per-bandwidth.

Untuk informasi selengkapnya, lihat Meminta EIP.

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

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

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

Hanya didukung saat Anda membuat EIP.

Metode penagihan EIP. Nilai yang valid:

  • PostPaid: bayar sesuai penggunaan.

Untuk informasi selengkapnya, lihat Meminta EIP.

Catatan

Hanya didukung di ack-extend-network-controller.

Konfigurasi langganan PrePaid tidak didukung.

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

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

Menambahkan instans Bandwidth Internet Bersama yang sudah ada.

Catatan

Plugin Terway harus v1.2.3 atau yang lebih baru. Tidak ada batasan versi untuk plugin ack-extend-network-controller.

network.alibabacloud.com/eip-isp

k8s.aliyun.com/eip-isp

Hanya didukung saat Anda membuat EIP.

Jenis jalur EIP. Nilai yang valid:

  • BGP: BGP (Multi-ISP).

  • BGP_PRO: BGP (Multi-ISP) Pro.

  • Jika Anda adalah pengguna daftar putih bandwidth jalur 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 adalah pengguna Cloud Keuangan Hangzhou, atur nilainya menjadi BGP_FinanceCloud.

Untuk informasi selengkapnya, lihat Meminta EIP.

Catatan

Plugin Terway harus v1.2.3 atau yang lebih baru. Tidak ada batasan versi untuk plugin ack-extend-network-controller.

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

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

Hanya didukung saat Anda membuat EIP.

Kolam alamat EIP. Untuk informasi selengkapnya tentang batasan dan langkah-langkah penggunaan kolam alamat EIP, lihat Membuat dan mengelola kolam alamat IP.

Catatan

Hanya didukung di ack-extend-network-controller.

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

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

Hanya didukung saat Anda membuat EIP.

Kelompok sumber daya EIP. Untuk informasi selengkapnya, lihat Meminta EIP.

Catatan

Hanya didukung oleh ack-extend-network-controller v0.4.0 dan yang lebih baru.

network.alibabacloud.com/eip-name

k8s.aliyun.com/eip-name

Hanya didukung saat Anda membuat EIP.

Nama EIP. Untuk informasi selengkapnya, lihat Meminta EIP.

Catatan

Hanya didukung oleh ack-extend-network-controller v0.6.0 dan yang lebih baru.

network.alibabacloud.com/eip-description

k8s.aliyun.com/eip-description

Hanya didukung saat Anda membuat EIP.

Deskripsi EIP. Untuk informasi selengkapnya, lihat Meminta EIP.

Catatan

Hanya didukung oleh ack-extend-network-controller v0.6.0 dan yang lebih baru.

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

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

Hanya didukung saat Anda membuat EIP.

Tingkat perlindungan keamanan EIP. EIP yang diaktifkan Anti-DDoS Proxy didukung. Jika Anda mengonfigurasi beberapa tingkat, pisahkan dengan koma (,). Untuk informasi selengkapnya, lihat Meminta EIP.

Catatan

Hanya didukung oleh ack-extend-network-controller v0.9.0 dan yang lebih baru.

network.alibabacloud.com/eip-tags

k8s.aliyun.com/eip-tags

Hanya didukung saat Anda membuat EIP.

Konfigurasi tag EIP. Nilainya harus dalam format JSON yang valid. Untuk informasi selengkapnya, lihat Mengelola tag.

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

Catatan

Hanya didukung oleh ack-extend-network-controller v0.11.0 dan yang lebih baru.

Tentukan instans EIP

Anda dapat melampirkan EIP yang sudah ada dengan menentukan ID instansnya. Anotasi pod tidak mengubah konfigurasi instans EIP. Anotasi tersebut hanya melampirkan EIP ke pod yang ditentukan.

Penting

Fitur ini tidak berlaku untuk controller multi-replika. Pastikan hanya satu pod yang mereferensikan instans EIP. Kami menyarankan Anda hanya menggunakan fitur ini dengan aplikasi berstatus StatefulSet.

Anotasi Pod

Nilai

network.alibabacloud.com/pod-eip-instanceid

k8s.aliyun.com/pod-eip-instanceid

Menggunakan EIP yang ditentukan. Masukkan ID instans EIP. Contohnya, eip-bp14qxxxxxxx.

Penting

Hindari mengalokasikan instans EIP yang sama ke pod dengan nama berbeda. Controller EIP akan melepas EIP setelah pod keluar. Selama periode ini, Anda tidak dapat menggunakan instans EIP yang sama di kontainer baru. Anda dapat memeriksa apakah sumber daya Pod EIP dengan nama yang sama dengan pod tersebut ada untuk menentukan apakah pod dan EIP telah dilepas.

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

Pengenalan anotasi untuk mengatur kebijakan pelepasan EIP

EIP tetap memastikan bahwa pod terus menggunakan alamat EIP yang sama setelah pod dibuat ulang. Kebijakan ini dapat dikombinasikan dengan fitur alokasi EIP otomatis untuk EIP tetap dalam aplikasi berstatus.

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

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

Anotasi Pod

Nilai

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

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

Kebijakan pelepasan Pod EIP. Nilai yang valid:

  • Follow (default): Mengikuti siklus hidup pod.

  • Never: Tidak menghapus Pod EIP. Anda harus menghapus Pod EIP secara manual ketika tidak lagi diperlukan.

Anda juga dapat langsung mengonfigurasi waktu kedaluwarsa. Ekspresi waktu tipe Go didukung. Misalnya, 5m30s berarti EIP dihapus 5,5 menit setelah pod dihapus.

Aktifkan EIP di kluster ack-extend-network-controller atau Terway

Aktifkan di ack-extend-network-controller

Catatan

ack-extend-network-controller perlu mengakses OpenAPI Alibaba Cloud untuk membuat sumber daya. Anda harus mengonfigurasi izin yang diperlukan di RAM. Kemudian, Anda dapat menginstal ack-extend-network-controller dari Marketplace Aplikasi dan menggunakan anotasi untuk membuat serta mengaitkan EIP ke pod tertentu.

Buat dan kaitkan EIP ke pod tertentu menggunakan anotasi

Anda dapat membuat atau mengaitkan EIP ke pod dengan menentukan anotasi di pod tersebut. Untuk informasi selengkapnya tentang anotasi, lihat bagian FAQ dalam topik ini.

  1. Buat aplikasi, lalu buat dan kaitkan EIP ke pod tertentu.

    Deployment

    Gunakan contoh berikut untuk membuat deployment. Instans EIP dengan bandwidth 5 Mbit/s dialokasikan secara otomatis 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, Anda dapat mengkueri sumber daya podeips.alibabacloud.com yang memiliki nama sama dengan pod untuk melacak informasi EIP yang dialokasikan.

    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 contoh berikut untuk membuat sumber daya StatefulSet. Dua pod dibuat, dan instans EIP dialokasikan secara otomatis ke setiap pod. Kebijakan pelepasan diatur agar PodEIP dihapus 10 menit setelah pod 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, Anda dapat mengambil informasi EIP yang dialokasikan dari sumber daya podeips.alibabacloud.com yang memiliki nama sama dengan pod.

    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 dari aplikasi berstatus dihapus, sumber daya kustom PodEIP (CR)-nya dipertahankan selama 10 menit sebelum dihapus. Jika pod dengan nama yang sama dibuat selama periode ini, pod tersebut akan menggunakan kembali EIP tersebut.

  2. Verifikasi konfigurasi.

    Setelah pod memasuki status Berjalan, Anda dapat memeriksa nilai anotasi k8s.aliyun.com/allocated-eipAddress di pod untuk melihat alamat EIP yang terkait. Anda kemudian dapat mengakses pod menggunakan EIP ini.

    image.png

Aktifkan di Terway

  1. Konfigurasikan Terway untuk mendukung fitur EIP.

    1. Modifikasi ConfigMap Terway.

      kubectl edit cm eni-config -n kube-system
    2. Tambahkan konten berikut ke eni_conf.

      "enable_eip_pool": "true"
      Catatan

      Jika Anda ingin memaksa melepas instans sebelumnya saat menentukan EIP, Anda juga harus menambahkan parameter "allow_eip_rob": "true" ke eni_conf.

    3. Setelah mengubah file, tekan tombol Esc, masukkan :wq!, lalu tekan tombol Enter untuk menyimpan file konfigurasi yang telah dimodifikasi dan keluar dari mode edit.

    4. Buat ulang instans Terway.

      kubectl delete pod -n kube-system -l app=terway-eniip # Jika Anda menginstal komponen terway-eni, ganti terway-eniip dengan terway-eni.
  2. Gunakan anotasi untuk membuat dan mengaitkan EIP ke pod.

    Anda dapat membuat atau mengaitkan EIP ke pod dengan menentukan anotasi di pod tersebut. Untuk informasi selengkapnya tentang batasan EIP, lihat Batasan.

    Konfigurasikan anotasi untuk skenario berbeda sebagai berikut:

    Skenario alokasi EIP otomatis

    Tambahkan anotasi berikut untuk mengalokasikan EIP secara otomatis ke pod dan menentukan bandwidth EIP tersebut.

    • k8s.aliyun.com/pod-with-eip: "true": Mengalokasikan EIP publik independen ke pod target.

    • k8s.aliyun.com/eip-bandwidth: "5": Menentukan bandwidth EIP. Bandwidth default adalah 5 Mbit/s, yang sama dengan nilai default untuk EIP.

    Kode berikut memberikan contoh file YAML.

    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" # Mengalokasikan alamat IP publik secara otomatis ke kontainer Nginx.
            network.alibabacloud.com/eip-bandwidth: "5"   # Menentukan bandwidth EIP. Bandwidth default adalah 5 Mbit/s, yang konsisten dengan nilai default untuk EIP.
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx

    Skenario menentukan EIP

    Penting
    • Satu EIP tidak dapat dikaitkan dengan beberapa pod. Oleh karena itu, skenario ini tidak berlaku untuk deployment dan StatefulSets.

    • Secara default, jika EIP sudah terpasang ke instans, EIP tersebut tidak dapat dipasang ke pod. Jika Anda ingin melepas EIP dari instans sebelumnya sebelum memasangnya ke yang baru, Anda harus mengonfigurasi "allow_eip_rob": "true" di ConfigMap seperti yang dijelaskan pada langkah sebelumnya.

    • Anda hanya dapat menentukan ID instans EIP untuk instans single-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: "<youreipInstanceId>"
  3. Verifikasi konfigurasi.

    Setelah pod memasuki status Berjalan, Anda dapat memeriksa nilai anotasi network.alibabacloud.com/allocated-eipAddress di pod untuk melihat alamat EIP yang terkait. Anda kemudian dapat mengakses pod menggunakan EIP ini.

FAQ

Mengapa pod menjadi Ready?

Controller mengonfigurasi alamat EIP untuk pod setelah alamat IP pod dialokasikan. Pod mungkin memasuki status Ready sebelum EIP berhasil dilampirkan. Anda dapat menggunakan metode berikut untuk mengontrol kapan pod memasuki status Ready.

Konfigurasikan readiness gates untuk pod

Catatan

Mengonfigurasi readiness gates untuk pod hanya didukung oleh ack-extend-network-controller.

Setelah Anda mengonfigurasi readinessGates di pod, controller akan mengatur kondisi pod setelah EIP berhasil dilampirkan. Pod tidak akan memasuki status Ready hingga EIP dilampirkan.

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
...

Konfigurasikan init container untuk pod

Anda dapat mengonfigurasi init container untuk pod. Di dalam init container, Anda dapat memeriksa apakah EIP telah berhasil dialokasikan. Untuk informasi selengkapnya, lihat contoh berikut.

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

Mengapa saya tidak dapat mengakses pod menggunakan EIP?

Masalah ini biasanya disebabkan oleh aturan daftar kontrol akses (ACL). Periksa kebijakan kontrol akses berikut:

  • Cloud Firewall: EIP tunduk pada aturan kontrol akses Cloud Firewall. Anda harus mengizinkan lalu lintas arah masuk dan keluar untuk EIP dan port bisnis yang digunakan oleh pod di Cloud Firewall. Untuk informasi selengkapnya, lihat Mengonfigurasi kebijakan kontrol akses untuk batas Internet.

  • Grup keamanan node: Setelah EIP dilampirkan ke pod, lalu lintas yang melewati EIP tetap tunduk pada kebijakan grup keamanan node tempat pod berada. Pastikan alamat IP klien diizinkan untuk lalu lintas arah masuk dan keluar di grup keamanan node, dan port bisnis pod terbuka. Untuk informasi selengkapnya, lihat Mengonfigurasi grup keamanan kluster.