全部产品
Search
文档中心

Container Service for Kubernetes:Menarik Gambar dari Instance Container Registry Tanpa Rahasia

更新时间:Jul 06, 2025

Komponen bebas-rahasia dari Layanan Kontainer untuk Kubernetes (ACK) mengotomatiskan proses autentikasi penarikan gambar dan menghilangkan kebutuhan untuk mengonfigurasi imagePullSecrets. Topik ini menjelaskan cara memasang, mengonfigurasi, dan menggunakan komponen bebas-rahasia untuk penarikan gambar serta tindakan pencegahan yang relevan.

Cara kerja komponen bebas-rahasia

Jika Anda tidak mengaktifkan Penarikan dari Pengguna Anonim untuk instance Container Registry, Anda harus memberikan nama pengguna dan kata sandi untuk autentikasi setiap kali ingin menarik gambar kontainer dari instance Container Registry untuk cluster ACK. Anda dapat menyimpan nama pengguna dan kata sandi dalam rahasia Kubernetes untuk memfasilitasi autentikasi. Namun, metode ini mungkin memiliki masalah berikut:

  • Rahasia dikodekan dalam Base64 plaintext dan mudah bocor.

  • Anda harus menentukan parameter imagePullSecrets setiap kali menarik gambar untuk beban kerja.

  • Secara default, rahasia hanya dapat digunakan dalam namespace rahasia tersebut.

Untuk menyelesaikan masalah di atas, Anda dapat menggunakan komponen bebas-rahasia dari ACK. Prosedur berikut menjelaskan cara kerja komponen tersebut:

  1. aliyun-acr-credential-helper mendapatkan akun sementara dan token dari instance Container Registry.

  2. aliyun-acr-credential-helper menyimpan akun sementara dan token dalam rahasia.

  3. aliyun-acr-credential-helper mengaitkan rahasia dengan akun layanan yang Anda tentukan dalam ConfigMap acr-configuration.

  4. Secara default, beban kerja dalam akun layanan menggunakan akun sementara dan token yang disimpan dalam rahasia untuk menarik gambar.

aliyun-acr-credential-helper dapat mengelola akun layanan di beberapa namespace secara bersamaan dan secara berkala memperbarui akun sementara dan token yang disimpan dalam rahasia berdasarkan konfigurasi Anda dalam ConfigMap. Ini mengurangi risiko kebocoran akun sementara dan token. aliyun-acr-credential-helper menghilangkan kebutuhan untuk menentukan imagePullSecrets untuk beban kerja Anda. Anda tidak dikenakan biaya untuk menggunakan aliyun-acr-credential-helper.

Penting
  • Hanya instance Container Registry Edisi Personal yang dibuat pada atau sebelum 8 September 2024 dan instance Container Registry Edisi Enterprise yang mendukung aliyun-acr-credential-helper.

  • Instance Container Registry Edisi Personal yang dibuat pada atau setelah 9 September 2024 tidak mendukung aliyun-acr-credential-helper. Jika Anda ingin menarik gambar dari instance Container Registry Edisi Personal yang dibuat setelah 8 September 2024, kami sarankan Anda menyimpan nama pengguna dan token yang digunakan untuk masuk ke instance Edisi Personal dalam rahasia dan kemudian merujuk rahasia tersebut dalam parameter imagePullSecrets dalam file YAML beban kerja.

Edisi komponen bebas-rahasia

Komponen bebas-rahasia yang disediakan oleh ACK tersedia dalam edisi dikelola (managed-aliyun-acr-credential-helper) dan edisi mandiri (aliyun-acr-credential-helper). Anda hanya dapat memasang satu edisi pada saat yang sama. Tabel berikut membandingkan edisi-edisi tersebut.

Item

managed-aliyun-acr-credential-helper

aliyun-acr-credential-helper (edisi mandiri)

Versi Cluster yang Didukung

  • Cluster ACK Pro yang menjalankan Kubernetes 1.22 atau lebih baru.

  • Cluster ACK Serverless yang menjalankan Kubernetes 1.22 atau lebih baru.

  • Cluster ACK Edge yang menjalankan Kubernetes 1.22 atau lebih baru.

  • Cluster ACK Basic yang menjalankan Kubernetes 1.20.0 atau lebih baru.

  • Cluster ACK Pro yang menjalankan Kubernetes 1.20.0 atau lebih baru.

  • Cluster ACK Kustom yang menjalankan Kubernetes 1.20.0 atau lebih baru.

Metode Penerapan

Diterapkan di bidang kontrol cluster.

Diterapkan di cluster Kubernetes menggunakan beban kerja. Secara default, pod yang memiliki 0,5 vCPU dan 0,5 GiB memori dibuat untuk aliyun-acr-credential-helper (edisi mandiri) di namespace kube-system cluster.

Log Permintaan Komponen

Tidak didukung.

Didukung.

Cara Menarik Gambar dari Instance Container Registry Lintas Akun Alibaba Cloud

Menggunakan fitur RAM Roles for Service Accounts (RRSA).

Menggunakan peran pekerja, RRSA, atau pasangan AccessKey.

Aktifkan Fitur Webhook untuk Memastikan Penggunaan Instan Akun Layanan

Tidak didukung.

Didukung.

Kartu di Konsol Container Registry (Anda dapat memeriksa edisi komponen di halaman manajemen komponen di konsol Container Registry.)

image

image

Prasyarat

  • Versi cluster Anda didukung oleh edisi komponen bebas-rahasia. Untuk informasi lebih lanjut, lihat tabel di bagian "Edisi Komponen Bebas-Rahasia" sebelumnya dari topik ini.

  • Instance Container Registry Anda adalah instance Edisi Personal yang dibuat pada atau sebelum 8 September 2024 atau instance Edisi Enterprise.

  • Peran RAM yang menggunakan komponen bebas-rahasia diberi izin yang diperlukan untuk mengakses instance Container Registry, membaca dan menulis ke repositori gambar, serta mengelola dan memperbarui rahasia. Jika RAM belum diberi izin, kunjungi Berikan Izin ke Peran RAM.

Menggunakan managed-aliyun-acr-credential-helper

Pasang komponen

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

  2. Di halaman Clusters, temukan cluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Operations > Add-ons.

  3. Di halaman Add-ons, klik tab Security, temukan kartu aliyun-acr-credential-helper (Managed) di bagian Keamanan, lalu klik Install in the lower-right corner of the card. di pojok kanan bawah kartu.

  4. Di halaman Install aliyun-acr-credential-helper, Anda dapat melihat parameter terkait AcrInstanceInfo dan parameter lainnya. Parameter terkait AcrInstanceInfo menentukan informasi tentang instance Container Registry yang ingin Anda kelola dengan komponen bebas-rahasia. Parameter lainnya menentukan informasi tentang komponen bebas-rahasia. Tabel berikut menjelaskan parameter tersebut.

    Catatan

    Anda dapat memodifikasi parameter terkait AcrInstanceInfo dan parameter lainnya setelah komponen bebas-rahasia dipasang.

    image

    Parameter tentang instance Container Registry terkait

    AcrInstanceInfo

    Deskripsi

    InstanceId

    ID instance Container Registry. Anda dapat memperoleh ID di konsol Container Registry.

    Penting

    Biarkan parameter ini kosong jika Anda menggunakan instance Container Registry Edisi Personal. Anda harus menentukan parameter ini jika Anda menggunakan instance Container Registry Edisi Enterprise.

    regionId

    ID wilayah instance Container Registry. Anda dapat memperoleh ID wilayah di konsol Container Registry.

    Penting

    Anda harus menentukan parameter ini jika ingin menarik gambar lintas wilayah.

    domains

    Nama domain yang digunakan komponen bebas-rahasia untuk mengakses instance Container Registry. Secara default, semua nama domain publik dan nama domain VPC instance Container Registry diisi. Anda dapat menentukan nama domain tertentu. Pisahkan beberapa nama domain dengan koma (,).

    Tentukan parameter ini hanya jika Anda ingin menarik gambar lintas akun

    assumeRoleARN

    Nama sumber daya cloud Alibaba (ARN) dari peran RAM yang diasumsikan oleh pemilik instance Container Registry.

    expireDuration

    Periode validitas rahasia yang digunakan untuk menarik gambar lintas akun Alibaba Cloud. Nilai valid: 3600 hingga 43200. Nilai default: 3600. Unit: detik. Set MaxSessionDuration dari peran RAM Akun B menjadi 43200.

    rrsaRoleARN

    ARN dari peran RAM yang diasumsikan oleh pemilik cluster ACK.

    rrsaOIDCProviderRoleARN

    ARN dari OIDC (OpenID Connect) IdP (penyedia identitas) cluster ACK.

    Parameter tentang komponen bebas-rahasia

    Parameter

    Deskripsi

    Specifies whether to enable RRSA

    Pilih opsi ini untuk mengaktifkan fitur RRSA jika Anda ingin menarik gambar lintas akun.

    watchNamespace

    Tentukan namespace dari mana Anda ingin menarik gambar tanpa menggunakan rahasia. Nilai default: default. Nilai all menentukan semua namespace dalam instance Container Registry. Anda dapat menentukan beberapa namespace. Pisahkan beberapa namespace dengan koma (,). Kami sarankan Anda mengonfigurasi namespace bisnis Anda untuk parameter ini. Jika Anda mengatur parameter ini ke all atau namespace tempat komponen sistem cluster disimpan, gambar komponen sistem mungkin gagal ditarik.

    serviceAccount

    Tentukan akun layanan yang terkait dengan managed-aliyun-acr-credential-helper. Nilai default: Default. Nilai Default menentukan akun layanan default dari semua namespace yang ditentukan. Nilai asterisk (*) menentukan semua akun layanan dalam namespace yang ditentukan. Anda dapat menentukan beberapa akun layanan. Pisahkan akun layanan dengan koma (,).

    expiringThreshold

    Tentukan periode waktu setelah rahasia kedaluwarsa. Nilai default: 15m. Kami sarankan Anda menggunakan nilai default. Nilai default menentukan bahwa rahasia diperbarui otomatis 15 menit sebelum rahasia kedaluwarsa.

    notifyEmail

    Anda tidak perlu menentukan parameter ini.

Perbarui konfigurasi komponen bebas-rahasia

Untuk memperbarui konfigurasi komponen bebas-rahasia, Anda dapat mengklik Configuration di pojok kanan bawah kartu aliyun-acr-credential-helper (Managed) di halaman Add-ons. Untuk informasi tentang parameter yang digunakan untuk memperbarui konfigurasi, lihat tabel sebelumnya "Parameter tentang instance Container Registry terkait" dan "Parameter tentang komponen bebas-rahasia".

image

Tarik gambar

Setelah Anda memasang dan mengonfigurasi komponen bebas-rahasia, Anda dapat menentukan akun layanan yang terkait dengan komponen bebas-rahasia saat membuat beban kerja untuk menarik gambar tanpa menggunakan rahasia.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: my-service-account # Tentukan akun layanan yang terkait dengan komponen bebas-rahasia.
      containers:
      - name: nginx
        image: ******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest # Tentukan alamat gambar Container Registry.
        ports:
        - containerPort: 80

Operasi lainnya

Tarik gambar lintas akun

managed-aliyun-acr-credential-helper memungkinkan Anda menarik gambar lintas akun Alibaba Cloud menggunakan RAM Roles for Service Accounts (RRSA).

Penting
  • Hanya di Cluster ACK Basic, Cluster ACK Pro, dan Cluster ACK Serverless Pro yang menjalankan Kubernetes 1.22 atau lebih baru, Anda dapat mengonfigurasi RRSA untuk menarik gambar dari instance Container Registry Edisi Enterprise.

  • Setelah Anda mengaktifkan fitur RRSA, rahasia yang dihasilkan oleh managed-aliyun-acr-credential-helper tidak dapat digunakan untuk menarik gambar pribadi instance Container Registry Edisi Personal. Setelah Anda mengaktifkan fitur RRSA, Anda tidak dapat menggunakan metode autentikasi lain yang dijelaskan dalam topik ini, seperti metode pasangan AccessKey.

  • Untuk mengaktifkan fitur RRSA untuk managed-aliyun-acr-credential-helper, Anda harus mengaktifkan RRSA untuk cluster di tab Informasi Dasar halaman Informasi Cluster di konsol ACK dan kemudian mengonfigurasi RRSA untuk managed-aliyun-acr-credential-helper. Jika Anda mengonfigurasi RRSA untuk managed-aliyun-acr-credential-helper dan kemudian mengaktifkan RRSA untuk cluster, Anda harus menghapus pod yang sesuai dengan managed-aliyun-acr-credential-helper setelah Anda mengaktifkan RRSA untuk cluster. Ini memungkinkan RRSA berfungsi.

  1. Aktifkan fitur RRSA untuk cluster. Untuk informasi lebih lanjut, lihat bagian "Aktifkan RRSA" dari topik Gunakan RRSA untuk Mengotorisasi Pod yang Berbeda untuk Mengakses Layanan Cloud yang Berbeda.

    Setelah fitur RRSA diaktifkan untuk cluster, navigasikan ke bagian Security and Auditing di bawah tab Basic Information. Jika Anda mengarahkan mouse ke label Enabled di sebelah RRSA OIDC, URL dan Nama Sumber Daya Alibaba Cloud (ARN) dari penyedia OpenID Connect (OIDC) ditampilkan.

    image

  2. Berikan izin kepada pengguna RAM pemilik cluster yang diperlukan untuk mengakses sumber daya Container Registry lintas akun.

    Setelah Anda mengaktifkan fitur RRSA untuk cluster, Anda harus melakukan operasi berikut untuk memberikan izin kepada pengguna RAM pemilik cluster. Misalnya, cluster saat ini berada di Akun A dan instance Container Registry berada di Akun B. Jika Anda ingin menarik gambar dari instance Container Registry, Anda harus memberikan cluster di Akun A izin untuk mengakses sumber daya Container Registry Akun B.

    1. Konfigurasikan peran RAM Akun A.

      Buat peran RAM di Akun A dan lampirkan kebijakan AliyunSTSAssumeRoleAccess ke peran RAM. Kebijakan ini memberikan izin kepada peran RAM untuk mengasumsikan peran RAM lainnya. Modifikasi kebijakan kepercayaan peran RAM, seperti yang ditunjukkan dalam kode berikut.

      • Ganti <oidc_issuer_url> dalam contoh dengan URL OIDC IdP cluster yang Anda catat di Langkah 1.

      • Ganti <oidc_provider_arn> dalam contoh dengan ARN OIDC IdP cluster yang Anda catat di Langkah 1.

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": "sts.aliyuncs.com",
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper"
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    2. Konfigurasikan peran RAM Akun B.

      Buat peran RAM yang memiliki izin cr.* di Akun B. Klik nama peran RAM. Di tab Trust Policy, masukkan ARN dari peran RAM Akun A di bidang Principal kebijakan kepercayaan. Lampirkan kebijakan berikut ke peran RAM Akun B. Kebijakan ini memberikan izin kepada peran RAM Akun B untuk mendapatkan informasi tentang instance Container Registry dan menarik gambar dari instance tersebut.

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "cr:GetAuthorizationToken",
                      "cr:ListInstanceEndpoint",
                      "cr:PullRepository"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }

      Anda dapat menentukan parameter MaxSessionDuration untuk peran RAM. Nilai valid untuk parameter ini berkisar antara 3600 hingga 43200 detik. Anda harus menentukan parameter expireDuration di langkah 7 berikutnya saat mengonfigurasi managed-aliyun-acr-credential-helper. Untuk informasi lebih lanjut, lihat Tentukan Durasi Sesi Maksimum untuk Peran RAM. Kami sarankan Anda menentukan nilai yang sama untuk MaxSessionDuration dan expireDuration. Nilai expireDuration bisa lebih kecil atau sama dengan nilai MaxSessionDuration.

  3. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  4. Di halaman Clusters, temukan cluster yang Anda inginkan dan klik namanya. Di panel kiri, klik Cluster Information.

  5. Di panel navigasi kiri, pilih Operations > Add-ons.

  6. Di halaman Add-ons, klik tab Security, temukan kartu aliyun-acr-credential-helper (Managed) di bagian Security, lalu klik Configuration di pojok kanan bawah kartu. Di kotak dialog aliyun-acr-credential-helper Parameters, klik Add lalu gunakan informasi instance Container Registry Akun B untuk mengonfigurasi parameter di bagian AcrInstanceInfo. Klik OK. Kemudian, pengguna dapat menarik gambar dari instance Container Registry Akun B.

Menggunakan aliyun-acr-credential-helper

Pasang komponen

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

  2. Di halaman Clusters, temukan cluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Operations > Add-ons.

  3. Di halaman Add-ons, klik tab Security, temukan kartu aliyun-acr-credential-helper di bagian Keamanan, lalu klik Install di pojok kanan bawah kartu.

  4. Di kotak dialog Install aliyun-acr-credential-helper, pilih mode izin yang digunakan komponen dari daftar drop-down tokenMode lalu klik OK. Tabel berikut menjelaskan mode izin yang dapat digunakan oleh komponen. Setelah Anda memasang komponen, Anda harus mengonfigurasi komponen sebelum dapat menggunakan komponen untuk menarik gambar tanpa menggunakan rahasia. Untuk informasi tentang cara mengonfigurasi komponen, lihat Perbarui Konfigurasi Komponen Bebas-Rahasia.

    tokenMode

    Deskripsi

    auto

    (Direkomendasikan) Komponen mendeteksi kapan cluster dibuat dan secara otomatis menentukan mode izin yang digunakan komponen. Jika cluster dibuat sebelum 03 April 2023, komponen menggunakan mode izin workerRole. Jika cluster dibuat pada atau setelah 03 April 2023, komponen menggunakan mode izin managedRole.

    Penting

    Versi aliyun-acr-credential-helper yang dirilis setelah 03 April 2023 menyediakan item konfigurasi untuk memungkinkan Anda menentukan peran RAM yang bergantung pada komponen. Untuk informasi lebih lanjut, lihat [Perubahan Produk] Cabut izin yang bergantung pada aliyun-acr-credential-helper.

    managedRole

    Komponen menggunakan peran AliyunCSManagedAcrRole yang diberikan izin tertentu dalam Prasyarat untuk mendapatkan izin.

    workerRole

    Komponen menggunakan peran pekerja cluster untuk mendapatkan izin. Untuk menggunakan mode ini, Anda harus memberikan izin tertentu kepada peran pekerja cluster. Untuk informasi lebih lanjut, lihat aliyun-acr-credential-helper menggunakan mode izin workerRole.

    Penting

    Pilih mode ini jika Anda ingin menarik gambar lintas akun dengan asumsi peran.

Perbarui konfigurasi komponen bebas-rahasia

Setelah komponen aliyun-acr-credential-helper dipasang, Anda harus mengonfigurasi ConfigMap acr-configuration menggunakan konsol ACK atau kubectl sebelum dapat menarik gambar.

Konsol ACK

  1. Di halaman Clusters, klik nama cluster yang ingin Anda ubah. Di panel navigasi kiri, pilih Configurations > ConfigMaps.

  2. Di bagian atas halaman ConfigMap, pilih kube-system dari daftar drop-down Namespace. Lalu, temukan acr-configuration ConfigMap dan konfigurasikan parameter. Tabel berikut menjelaskan parameter tersebut.

    Key

    Deskripsi

    watch-namespace

    Namespace dari mana Anda ingin menarik gambar tanpa menggunakan rahasia. Nilai default: default. Nilai all menentukan semua namespace dalam instance Container Registry. Pisahkan beberapa namespace dengan koma (,). Kami sarankan Anda mengonfigurasi namespace bisnis Anda untuk parameter ini. Jika Anda mengatur parameter ini ke all atau namespace tempat komponen sistem cluster disimpan, gambar komponen sistem mungkin gagal ditarik.

    acr-api-version

    Gunakan nilai default.

    batas-kedaluwarsa

    Periode waktu setelah Secret yang di-cache kedaluwarsa.

    acr-registry-info

    Informasi tentang instance Container Registry. Setiap instance dapat ditentukan oleh tiga parameter tipe string dalam file YAML.

    • instanceId: ID instance Container Registry. Anda dapat memperoleh ID di konsol Container Registry.

      Penting

      Biarkan parameter ini kosong jika Anda menggunakan instance Container Registry Edisi Personal. Anda harus menentukan parameter ini jika Anda menggunakan instance Container Registry Edisi Enterprise.

    • regionId: ID wilayah instance Container Registry. Anda dapat memperoleh ID wilayah di konsol Container Registry.

      Penting

      Anda harus menentukan parameter ini jika ingin menarik gambar lintas wilayah. Lihat contoh konfigurasi berikut.

    • domains: Nama domain yang digunakan komponen bebas-rahasia untuk mengakses instance Container Registry. Secara default, semua nama domain instance ACR dalam instanceId dimasukkan. Anda dapat menentukan nama domain tertentu. Pisahkan beberapa nama domain dengan koma (,).

      Contoh konfigurasi untuk penarikan lintas wilayah

      Saat Anda menarik gambar dari beberapa instance Container Registry di wilayah berbeda, tentukan ID dan wilayah setiap instance Container Registry.

      data:
          service-account: "default"
          watch-namespace: "all"
          expiring-threshold: "15m"
          notify-email: "c*@aliyuncs.com"
          acr-registry-info: |
            - instanceId: "cri-instanceId"
              regionId: "cn-beijing"
            - instanceId: "cri-instanceId"
              regionId: "cn-hangzhou"

    Akun-Layanan

    Akun layanan yang terkait dengan aliyun-acr-credential-helper. Pisahkan beberapa akun layanan dengan koma (,). Nilai default menentukan akun layanan default dari semua namespace yang ditentukan di watch-namespace. Nilai asterisk (*) menentukan semua akun layanan dalam namespace yang ditentukan.

kubectl

  1. Jalankan perintah berikut untuk memodifikasi ConfigMap acr-configuration berdasarkan informasi berikut.

    kubectl edit cm acr-configuration -n kube-system

    Kunci

    Deskripsi

    Nilai

    service-account

    Akun layanan yang digunakan komponen aliyun-acr-credential-helper untuk menarik gambar.

    Nilai default: default.

    Catatan

    Pisahkan beberapa akun layanan dengan koma (,). Asterisk (*) menentukan semua akun layanan di semua namespace.

    acr-registry-info

    Informasi tentang instance Container Registry. Setiap instance dapat ditentukan oleh tiga parameter tipe string dalam file YAML.

    Catatan

    Parameter untuk menentukan instance:

    • instanceId: ID instance Container Registry. Bidang ini diperlukan untuk instance Container Registry Edisi Enterprise.

    • regionId: ID wilayah tempat instance Container Registry berada. Parameter ini opsional. Nilai default adalah wilayah tempat cluster ACK Anda berada.

    • domains: nama domain instance Container Registry. Parameter ini opsional. Secara default, semua nama domain instance ditentukan. Pisahkan beberapa nama domain dengan koma (,).

    Contoh konfigurasi untuk instance Container Registry Edisi Enterprise:

    - instanceId: <cri-instanceId>
      regionId: "cn-hangzhou"
      domains: "xxx.com,yyy.com"

    watch-namespace

    Namespace dari mana Anda ingin menarik gambar tanpa menggunakan rahasia.

    Nilai default: default. Nilai all menentukan semua namespace dalam instance Container Registry. Pisahkan beberapa namespace dengan koma (,).

    Catatan

    Kami sarankan Anda mengatur nilai ke namespace produksi Anda. Jika Anda mengatur nilai ke all atau namespace komponen sistem cluster, gambar dalam namespace mungkin gagal ditarik.

    expiring-threshold

    Periode waktu setelah Secret yang di-cache kedaluwarsa.

    Nilai default: 15m.

    Catatan

    Kami sarankan Anda menggunakan nilai default. Nilai default menentukan bahwa Secret diperbarui 15 menit sebelum Secret yang di-cache kedaluwarsa.

Tarik gambar

Setelah Anda memasang dan mengonfigurasi komponen bebas-rahasia, Anda dapat menentukan akun layanan yang terkait dengan komponen bebas-rahasia saat membuat beban kerja untuk menarik gambar tanpa menggunakan rahasia.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: my-service-account # Tentukan akun layanan yang terkait dengan komponen bebas-rahasia.
      containers:
      - name: nginx
        image: ******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest # Tentukan alamat gambar Container Registry.
        ports:
        - containerPort: 80

Tindakan pencegahan

Gunakan instance Container Registry Edisi Personal

Jika Anda ingin menarik gambar dari instance Container Registry Edisi Personal, biarkan instanceId kosong.

data:
    service-account: default
    watch-namespace: all
    expiring-threshold: 15m
    notify-email: c*@example.com 
    acr-registry-info: |
      - instanceId: ""  # Biarkan parameter ini kosong jika ingin menarik gambar dari instance Container Registry Edisi Personal.
        regionId: cn-xxxx

aliyun-acr-credential-helper menggunakan mode izin workerRole

Jika Anda memilih workerRole sebagai mode izin yang digunakan oleh aliyun-acr-credential-helper, peran pekerja cluster harus memiliki izin berikut:

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "cr:GetAuthorizationToken",
                "cr:ListInstanceEndpoint",
                "cr:PullRepository"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

Operasi lainnya

Tarik gambar lintas akun

aliyun-acr-credential-helper memungkinkan Anda menggunakan metode berikut untuk menarik gambar dari instance Container Registry lintas akun.

  • Gunakan RRSA: Akun layanan dalam cluster Akun A mengasumsikan peran Akun B. Pod yang menggunakan akun layanan dapat menarik gambar pribadi Akun B.

  • Gunakan Peran Pekerja: Peran pekerja Akun A mengasumsikan peran RAM Akun B yang memiliki izin cr.*. Lalu, aliyun-acr-credential-helper menggunakan peran pekerja untuk menarik gambar pribadi Akun B. Untuk menggunakan metode ini, Anda harus memilih mode izin workerRole untuk aliyun-acr-credential-helper.

  • Gunakan Pasangan AccessKey Pengguna RAM Pemilik Instance Container Registry: aliyun-acr-credential-helper Akun A menggunakan pasangan AccessKey pengguna RAM Akun B untuk menarik gambar pribadi Akun B. Metode ini mudah digunakan, tetapi pasangan AccessKey pengguna RAM Akun B disimpan dalam plaintext dan mungkin bocor.

Gunakan RRSA

Penting
  • Hanya di Cluster ACK Basic, Cluster ACK Pro, dan Cluster ACK Serverless Pro yang menjalankan Kubernetes 1.22 atau lebih baru, Anda dapat mengonfigurasi RRSA untuk menarik gambar dari instance Container Registry Edisi Enterprise.

  • Untuk mengaktifkan fitur RRSA, Anda harus memperbarui aliyun-acr-credential-helper ke v23.02.06.1-74e2172-aliyun atau lebih baru.

  • Untuk mengaktifkan fitur RRSA untuk managed-aliyun-acr-credential-helper, Anda harus mengaktifkan RRSA untuk cluster di tab Informasi Dasar halaman Informasi Cluster di konsol ACK lalu mengonfigurasi RRSA untuk managed-aliyun-acr-credential-helper. Jika Anda mengonfigurasi RRSA untuk aliyun-acr-credential-helper lalu mengaktifkan RRSA untuk cluster, Anda harus menghapus pod yang sesuai dengan aliyun-acr-credential-helper setelah Anda mengaktifkan RRSA untuk cluster. Ini memungkinkan RRSA berfungsi.

  1. Aktifkan fitur RRSA untuk cluster. Untuk informasi lebih lanjut, lihat Aktifkan RRSA.

    Setelah Anda mengaktifkan fitur RRSA untuk kluster, di bagian Security and Auditing pada tab Basic Information di halaman Informasi Kluster, arahkan kursor ke Enabled di samping RRSA OIDC untuk melihat dan mencatat URL dan ARN dari OIDC IdP. image

  2. Berikan izin kepada pengguna RAM pemilik cluster yang diperlukan untuk mengakses sumber daya Container Registry lintas akun.

    Setelah Anda mengaktifkan fitur RRSA untuk cluster, Anda harus melakukan operasi berikut untuk memberikan izin kepada pengguna RAM pemilik cluster. Misalnya, cluster saat ini berada di Akun A dan instance Container Registry berada di Akun B. Jika Anda ingin menarik gambar dari instance Container Registry, Anda harus memberikan cluster di Akun A izin untuk mengakses sumber daya Container Registry Akun B.

    1. Buat peran RAM di Akun A dan lampirkan kebijakan AliyunSTSAssumeRoleAccess ke peran RAM. Kebijakan ini memberikan izin kepada peran RAM untuk mengasumsikan peran RAM lainnya. Modifikasi kebijakan kepercayaan peran RAM, seperti yang ditunjukkan dalam kode berikut.

      • Ganti <oidc_issuer_url> dalam contoh dengan URL OIDC IdP cluster yang Anda catat di Langkah 1.

      • Ganti <oidc_provider_arn> dalam contoh dengan ARN OIDC IdP cluster yang Anda catat di Langkah 1.

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:aud": "sts.aliyuncs.com",
                "oidc:iss": "<oidc_issuer_url>",
                "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper"
              }
            },
            "Effect": "Allow",
            "Principal": {
              "Federated": [
                "<oidc_provider_arn>"
              ]
            }
          }
        ],
        "Version": "1"
      }
    2. Buat peran RAM yang memiliki izin cr.* di Akun B. Di tab Trust Policy, masukkan ARN dari peran RAM Akun A di bidang Principal kebijakan kepercayaan.

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                <ARN dari peran RAM yang Anda buat untuk Akun A>
              ]
            }
          }
        ],
        "Version": "1"
      }

      Lampirkan kebijakan berikut ke peran RAM Akun B. Kebijakan tersebut memberikan izin kepada peran RAM Akun B untuk mendapatkan informasi tentang instance Container Registry dan menarik gambar dari instance tersebut.

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "cr:GetAuthorizationToken",
              "cr:ListInstanceEndpoint",
              "cr:PullRepository"
            ],
            "Resource": "*",
            "Effect": "Allow"
          }
        ]
      }

      Anda dapat menentukan parameter MaxSessionDuration untuk peran RAM. Nilai valid untuk parameter ini berkisar antara 3600 hingga 43200 detik. Anda harus menentukan parameter expireDuration di langkah 3 berikutnya saat mengonfigurasi ConfigMap acr-configuration. Kami sarankan Anda menentukan nilai yang sama untuk MaxSessionDuration dan expireDuration. Nilai expireDuration bisa lebih kecil atau sama dengan nilai MaxSessionDuration.

  3. Konfigurasikan ConfigMap acr-configuration

    Modifikasi ConfigMap acr-configuration berdasarkan informasi berikut.

    data:
      service-account: "default"
      watch-namespace: "all"
      expiring-threshold: "15m"
      notify-email: "c*@example.com"
      acr-registry-info: |
        - instanceId: "cri-xxx"
          regionId: "cn-hangzhou"
          domains: "instance.default.domain.com,instance.custom.domain.com"
          rrsaRoleARN: aUserRoleARN
          rrsaOIDCProviderRoleARN: aUserClusterOIDCProviderRoleARN
          assumeRoleARN: bUserRoleARN
          expireDuration: 3600
      rrsa: |
        enable: true

    Parameter

    Deskripsi

    Contoh

    rrsaRoleARN

    ARN dari peran RAM yang Anda buat untuk Akun A.

    acs:ram::aaa

    rrsaOIDCProviderRoleARN

    ARN dari OIDC IdP yang Anda peroleh di tab Informasi Dasar halaman Informasi Cluster di konsol ACK.

    acs:ram::bbb

    assumeRoleARN

    ARN dari peran RAM yang Anda buat untuk Akun B.

    acs:ram::ccc

    expireDuration

    Periode sesi peran RAM yang Anda buat untuk Akun B. Periode sesi sama dengan periode validitas rahasia yang dihasilkan oleh aliyun-acr-credential-helper.

    Penting

    Nilai expireDuration tidak boleh lebih besar dari nilai MaxSessionDuration peran RAM Akun B.

    Nilai default: 3600. Nilai valid: 3600 hingga 43200. Unit: detik.

Gunakan peran pekerja

Penting
  • Anda harus memilih mode izin workerRole untuk aliyun-acr-credential-helper.

  • Peran RAM Akun B harus memiliki izin cr.* untuk menarik gambar pribadi dari repositori pribadi tertentu instance Container Registry.

  • Akun B mengizinkan peran pekerja cluster ACK Akun A untuk mengasumsikan peran RAM Akun B. Aturan ini memerlukan Anda untuk memodifikasi kebijakan kepercayaan peran RAM Akun B.

  • Peran pekerja cluster ACK Akun A harus memiliki izin untuk mengasumsikan peran RAM Akun B. Aturan ini memerlukan Anda untuk melampirkan kebijakan AliyunAssumeRoleAccess ke peran pekerja Akun A.

  1. Buat peran RAM untuk Akun B. Tentukan Cloud Account sebagai entitas tepercaya peran RAM. Pastikan peran RAM diberi izin yang diperlukan untuk menarik gambar pribadi dari instance Container Registry Akun B. Untuk informasi lebih lanjut, lihat Buat Peran RAM untuk Akun Alibaba Cloud Tepercaya.

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  2. Modifikasi kebijakan kepercayaan peran RAM Akun B untuk mengizinkan peran pekerja cluster ACK Akun A mengasumsikan peran RAM Akun B.

    Peroleh ARN dari peran pekerja cluster ACK.

    1. Untuk informasi tentang cara memperoleh ARN peran RAM, lihat Bagaimana Cara Melihat ARN Peran RAM?

    2. Modifikasi kebijakan kepercayaan peran RAM Akun B.

      1. Masuk ke Konsol RAM. Di panel navigasi kiri, klik Roles. Di halaman Peran, temukan peran RAM Akun B dan klik nama peran tersebut.

      2. Di halaman detail peran RAM, klik tab Trust Policy dan masukkan ARN dari peran pekerja Akun A di bidang Principal kebijakan kepercayaan.RamRoleARN

  3. Periksa apakah peran pekerja cluster ACK di Akun A diberi izin AssumeRole. Untuk informasi lebih lanjut, lihat Lihat Informasi tentang Kebijakan.AssumeRule权限

  4. Tambahkan parameter assumeRoleARN ke ConfigMap acr-configuration.

    Atur nilai parameter assumeRoleARN ke ARN dari peran RAM Akun B. Untuk informasi tentang cara memperoleh ARN peran RAM, lihat Bagaimana Cara Melihat ARN Peran RAM? File JSON berikut menunjukkan konfigurasi sampel acr-configuration.

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@example.com"
        acr-registry-info: |
          - instanceId: ""
            regionId: "cn-beijing"
            domains: "registry.cn-beijing.aliyuncs.com"
            assumeRoleARN: "acs:ram::.*:role/kubernetesworkerrole-test"
            expireDuration: 3600

Gunakan pasangan AccessKey pengguna RAM pemilik instance Container Registry

Lihat Langkah-Langkahnya

  1. Buat pengguna RAM di Akun B. Pastikan pengguna RAM diberi izin cr.*.

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  2. Konfigurasikan ConfigMap acr-configuration di namespace kube-system. Masukkan ID AccessKey dan rahasia AccessKey dari pengguna RAM yang Anda buat.

    Dengan cara ini, aliyun-acr-credential-helper dapat menggunakan pengguna RAM untuk menarik gambar pribadi. Untuk informasi tentang cara melihat pasangan AccessKey pengguna RAM, lihat Lihat Informasi tentang Pasangan AccessKey Pengguna RAM.

    File YAML berikut menunjukkan konfigurasi sampel acr-configuration.

    data:
        service-account: "default"
        watch-namespace: "all"
        expiring-threshold: "15m"
        notify-email:"c*@example.com"
        acr-registry-info: |
          - instanceId: ""
            customAccessKey: "xxxxx" // Masukkan ID AccessKey dari pengguna RAM yang dibuat.
            customAccessKeySecret: "xxxxxx" // Masukkan rahasia AccessKey dari pengguna RAM yang dibuat.

Aktifkan fitur webhook untuk memastikan penggunaan instan akun layanan

Penting

Untuk mengaktifkan fitur webhook, Anda harus memperbarui aliyun-acr-credential-helper ke v23.02.06.1-74e2172-aliyun atau lebih baru.

Setelah Anda mengaktifkan fitur webhook, komponen bebas-rahasia menggunakan fitur webhook untuk memantau perubahan akun layanan dalam cluster. Setelah akun layanan dibuat, komponen bebas-rahasia segera menyuntikkan rahasia ke akun layanan. Jika Anda ingin menggunakan akun layanan segera setelah dibuat, misalnya, jika Anda menggunakan Helm chart untuk membuat akun layanan dan Deployment, Anda dapat mengaktifkan fitur webhook. Fitur webhook dapat memengaruhi kinerja komponen bebas-rahasia. Kami tidak menyarankan Anda mengaktifkan fitur webhook dalam skenario lain.

Untuk menggunakan fitur webhook, Anda harus menambahkan parameter berikut ke ConfigMap acr-configuration:

data:
  webhook-configuration: |
    enable: true
    failure-policy: Ignore
    timeout-seconds: 10

Parameter

Deskripsi

enable

Menentukan apakah akan mengaktifkan fitur webhook.

  • true

  • false

failure-policy

Menentukan cara menangani akun layanan ketika fitur webhook tidak berfungsi seperti yang diharapkan.

  • Ignore: Akun layanan dibuat meskipun terjadi pengecualian. Rahasia mungkin tidak terkait dengan akun layanan.

  • Fail: Pembuatan akun layanan dihentikan jika terjadi pengecualian. Kami sarankan Anda tidak menggunakan nilai ini karena pengaturan ini dapat menyebabkan kegagalan penyebaran beban kerja.

Penting

Karena batasan API Server cluster, jika Anda mengatur timeout-seconds ke 15 dan failure-policy ke Fail dan permintaan untuk membuat 10 akun layanan per detik dikirim ke API Server selama periode waktu tertentu, API Server mungkin gagal membuat akun layanan.

timeout-seconds

Periode timeout permintaan untuk membuat akun layanan. Saat permintaan untuk membuat akun layanan habis waktu, sistem merespons berdasarkan nilai failure-policy. Nilai default: 10. Unit: detik.

Referensi

Untuk informasi tentang catatan rilis aliyun-acr-credential-helper, lihat aliyun-acr-credential-helper.