全部产品
Search
文档中心

Container Compute Service:Pasang EIP mandiri untuk pod

更新时间:Jul 02, 2025

Dalam kluster ACS, alamat IP sebuah pod biasanya merupakan alamat IP pribadi. Namun, dalam beberapa skenario, pod memerlukan alamat IP publik mandiri untuk berkomunikasi secara langsung dengan Internet. Topik ini menjelaskan cara memasang Elastic IP Address (EIP) mandiri untuk pod di dalam kluster ACS.

Prasyarat

Kluster ACS telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster ACS.

Informasi latar belakang

Secara umum, pod mengakses data Internet melalui "external SNAT+EIP". Untuk informasi lebih lanjut, lihat Aktifkan akses Internet untuk kluster ACS. Data masuk Internet dari pod biasanya mengalir melalui Service tipe LoadBalancer. Dalam skenario tertentu, pod memerlukan alamat IP mandiri, seperti:

  • Port pemetaan eksternal pod bersifat acak, yang sering terjadi pada server game protokol User Datagram Protocol (UDP) atau telekonferensi. Sebagai contoh, protokol RTSP menggunakan port berbeda untuk klien yang berbeda.

  • Data Internet menghadapi persaingan sumber daya di titik keluar.

Batasan

  • Sebelum menggunakan EIP, pastikan Anda memahami batasan EIP. Untuk informasi lebih lanjut, lihat Batasan.

  • Jika Anda menggunakan kemampuan alokasi EIP otomatis, sumber daya EIP mungkin diminta dan dilepaskan berulang kali saat membuat ulang pod atau mengalami kegagalan CNI, yang dapat memicu batasan EIP. Untuk menghindari situasi ini, Anda dapat menentukan EIP untuk pod dengan mengonfigurasi anotasi pod network.alibabacloud.com/allocated-eip-id.

Langkah 1: Konfigurasikan izin RAM yang diperlukan untuk memasang EIP

Untuk kluster ACS, Anda perlu menghasilkan AccessKey untuk pengguna Resource Access Management (RAM). Untuk operasi spesifik, lihat Buat pengguna RAM dan Buat kebijakan kustom.

Langkah 2: Instal atau tingkatkan plug-in untuk kluster

Anda perlu menginstal plug-in ack-extend-network-controller di ACK App Market atau entri aplikasi kluster ACS, serta mengaktifkan pengontrol EIP.

Catatan

Kluster ACS dapat dikelola di konsol ACK. Untuk informasi lebih lanjut, lihat Ikhtisar Produk.

Instal melalui entri Helm di kluster ACS

  1. Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi kiri halaman detail kluster, pilih Applications > Helm.

  3. Di halaman Helm, klik Deploy. Lengkapi konfigurasi Basic Information dengan informasi berikut.

    Parameter

    Nilai contoh

    Application Name

    ack-extend-network-controller

    Namespace

    kube-system

    Source

    Default adalah App Catalog.

    Chart

    Kotak pencarian: cari ack-extend-network-controller.

    Klik Next.

  4. Di halaman Parameters, pilih Chart Version. Konfigurasikan Required parameters sesuai dengan tabel berikut, lalu klik OK.

    Catatan

    Kluster ACS hanya mendukung instalasi dan penggunaan komponen dengan versi >=v0.9.3.

    Deskripsi parameter adalah sebagai berikut:

    Parameter konfigurasi

    Tipe

    Diperlukan

    Deskripsi

    enableControllers

    []string

    Ya

    Hapus komentar default dari eip untuk mengaktifkan fitur EIP.

    vpcid

    string

    Ya

    ID VPC yang terkait dengan EIP.

    credential.accessKey

    string

    Ya

    ID AccessKey dari akun izin yang diperlukan untuk memasang EIP.

    credential.accessSecret

    string

    Ya

    Rahasia AccessKey dari akun izin yang diperlukan untuk memasang EIP.

    networkController.eipController.maxConcurrentReconciles

    int

    Tidak

    Jumlah konkurensi dari pengontrol EIP.

    networkController.eipController.garbageCollectionPeriodInMinutes

    int

    Tidak

    Periode untuk pengontrol EIP membersihkan EIP tetap.

    customStatefulWorkloadKinds

    []string

    Tidak

    Jenis Pengontrol Stateful Kustom.

  5. Kembali ke halaman Helm, dan Anda dapat melihat bahwa komponen baru ack-extend-network-controller telah diterapkan.

Instal melalui ACK App Market

  1. Masuk ke Konsol Manajemen Layanan Kontainer, di panel navigasi kiri, pilih Marketplace > Marketplace.

  2. Di bilah pencarian di halaman Marketplace, masukkanack-extend-network-controller, lalu klik.

  3. Di halaman detail aplikasi, klik One-click Deployment di sudut kanan atas.

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

    1. Di halaman konfigurasi parameter, pilih nomor versi dan atur parameter yang sesuai, lalu klik OK.

      Catatan

      Kluster ACS hanya mendukung instalasi dan penggunaan komponen dengan versi >=v0.9.2.

      Deskripsi parameter adalah sebagai berikut:

      Parameter konfigurasi

      Tipe

      Diperlukan

      Deskripsi

      enableControllers

      []string

      Ya

      Konfigurasikan eip untuk mengaktifkan fungsi EIP.

      vpcid

      string

      Ya

      ID VPC yang terkait dengan EIP

      credential.accessKey

      string

      Ya

      AK dari akun izin yang diperlukan untuk memasang EIP.

      credential.accessSecret

      string

      Ya

      SK dari akun izin yang diperlukan untuk memasang EIP.

      networkController.eipController.maxConcurrentReconciles

      int

      Tidak

      Jumlah konkurensi dari pengontrol EIP.

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      Tidak

      Periode untuk pengontrol EIP membersihkan EIP tetap.

      customStatefulWorkloadKinds

      []string

      Tidak

      Jenis Pengontrol Stateful Kustom.

      Contoh parameter adalah sebagai berikut:

      clusterID: "c11ba338192xxxxxxx"  
      regionID: "cn-hangzhou"      
      vpcID: "vpc-bp1rkq0zxxxxxx" 
      enableVirtualNode: true
      affinity: null
      enableControllers:
        - eip              
      networkController:
        eipController:
          maxConcurrentReconciles: 10   
          garbageCollectionPeriodInMinutes: 1  
        customStatefulWorkloadKinds:           
        - foo
      credential:                             
        accessKey: "xxxxxxxxxxxx"
        accessSecret: "xxxxxxxxxxxxxx"

      Jika Anda perlu memperbarui versi dan parameter plug-in ack-extend-network-controller, lihat App Marketplace.

Langkah 3: Aktifkan fungsi EIP

ACS mendukung aktivasi fungsi EIP menggunakan anotasi. Anda dapat membuat atau mengaitkan EIP dengan pod dengan menentukan annotations di dalam pod. Untuk informasi rinci tentang aktivasi anotasi fungsi EIP, lihat Anotasi untuk mengaktifkan fitur EIP.

Catatan

Anda dapat memilih untuk mengalokasikan EIP secara otomatis atau menentukan EIP sesuai kebutuhan. Kedua metode ini berbeda dalam anotasi yang digunakan dan kebijakan daur ulang EIP. Untuk metode instance EIP yang ditentukan, menghapus pod tidak melepaskan instance EIP, sedangkan metode alokasi EIP otomatis melepaskan instance EIP secara default. Untuk informasi rinci tentang kebijakan daur ulang EIP, lihat Anotasi untuk mengonfigurasi kebijakan pelepasan EIP.

Alokasikan EIP secara otomatis

  1. Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi kiri halaman detail kluster, pilih Workloads > Deployments.

  3. Di sudut kanan atas halaman Deployments, klik Create from YAML.

  4. Buat kontroler Deployment menggunakan contoh berikut dan beri nama kontroler tersebut "example".

    Perluas untuk melihat Deployment YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            network.alibabacloud.com/pod-with-eip: "true"
            network.alibabacloud.com/eip-bandwidth: "5"
        spec:
          containers:
          - name: example
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80

    Bagian anotasi menunjukkan bahwa instance EIP dengan bandwidth 5 Mbps dialokasikan secara otomatis untuk setiap pod.

  5. Setelah pembuatan berhasil, masuk ke Deployment bernama example. Klik nama pod (misalnya: example-78d17b7xxx-adxxx) untuk masuk ke halaman Details pod. Anda dapat melihat informasi EIP yang dibuat di bagian Annotations di sebelah kanan halaman. Anda juga dapat mengklik Edit untuk melihat informasi EIP yang dibuat di YAML pod.

    Perluas untuk melihat pod YAML

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        ...
        network.alibabacloud.com/allocated-eip-id: eip-xxxxx0y884ucrevoxxxxx
        network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx
        network.alibabacloud.com/allocated-eni-id: eni-xxxxx563trofuhaxxxxx
        network.alibabacloud.com/eip-bandwidth: '5'
        network.alibabacloud.com/pod-with-eip: 'true'
        ...
      labels:
        alibabacloud.com/compute-class: general-purpose
        app: example
      name: example-78d17b7xxx-adxxx
      namespace: default
    spec:
      ...
  6. Setelah menyelesaikan contoh, Anda dapat menghapus Deployment bernama example. Jika Anda tidak menentukan ID instance EIP pod, kebijakan daur ulang EIP pod default mengikuti siklus hidup pod. Oleh karena itu, EIP dilepaskan secara otomatis saat pod dihapus.

Tentukan EIP

  1. Siapkan instance EIP yang digunakan dalam contoh. Harap Ajukan EIP terlebih dahulu.

  2. Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.

  3. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi kiri halaman detail kluster, pilih Workloads > Deployments.

  4. Di sudut kanan atas halaman Deployments, klik Create from YAML.

  5. Buat kontroler StatefulSet menggunakan contoh berikut dan beri nama kontroler tersebut "example".

    Perluas untuk melihat Deployment YAML

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      labels:
        app: example
      name: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            network.alibabacloud.com/pod-eip-instanceid: eip-xxxxx66wjkj16lf9xxxxx
        spec:
          containers:
          - name: example
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80

    Bagian anotasi menunjukkan bahwa instance EIP dengan ID instance eip-xxxxx66wjkj16lf9xxxxx ditentukan untuk pod. ID instance ini perlu diganti dengan nilai sebenarnya.

  6. Setelah pembuatan berhasil, masuk ke StatefulSet bernama example. Klik nama pod (misalnya: example-0) untuk masuk ke halaman Details pod. Anda dapat melihat informasi instance EIP yang terikat di bagian Annotations di sebelah kanan halaman. Anda juga dapat mengklik Edit untuk melihat informasi instance EIP yang terikat di YAML pod.

    Perluas untuk melihat pod YAML

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        ...
        network.alibabacloud.com/allocated-eip-id: eip-xxxxx66wjkj16lf9xxxxx
        network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx
        network.alibabacloud.com/allocated-eni-id: eni-xxxxx612ub33hunxxxxx
        network.alibabacloud.com/pod-eip-instanceid: eip-xxxxx66wjkj16lf9xxxxx
        ...
      labels:
        alibabacloud.com/compute-class: general-purpose
        app: example
      name: example-0
      namespace: default
    spec:
      ...
  7. Setelah menyelesaikan contoh, Anda dapat menghapus StatefulSet bernama example. Jika Anda menentukan ID instance EIP pod, kebijakan daur ulang EIP pod adalah tidak melepaskan instance EIP. Oleh karena itu, EIP tidak dilepaskan secara otomatis saat pod dihapus.

Operasi terkait

Pengontrol mengonfigurasi alamat EIP untuk pod setelah IP pod dialokasikan. Selama proses ini, pod mungkin memasuki status Ready sebelum pengikatan EIP berhasil. Untuk menyelesaikan masalah ini dan memastikan bahwa pod menyelesaikan pengikatan EIP sebelum memasuki status Ready, yang menghindari gangguan layanan potensial atau waktu habis koneksi, Anda dapat mencoba metode berikut.

Periksa status pengikatan EIP menggunakan Readiness gates

Pengontrol menetapkan kondisi pod conditions ketika readinessGates dikonfigurasi di dalam pod, dan pengikatan EIP berhasil. Pod tidak berada dalam status Ready sebelum EIP terikat.

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

Periksa status pengikatan EIP menggunakan initContainers

Anda dapat memeriksa apakah EIP telah dialokasikan di initContainers saat Anda mengonfigurasi initContainers untuk pod. Silakan merujuk pada contoh berikut untuk mengonfigurasi initContainers.

apiVersion: v1
kind: Pod
metadata:
  name: example
  annotations:
    network.alibabacloud.com/pod-with-eip: "true"
spec:
  containers:
  - name: example
    image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init
    image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
    command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/pod-ips=\\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