Menjalankan workload dengan hak istimewa dari partner Autopilot GKE


Halaman ini menunjukkan cara menjalankan workload istimewa dari partner Autopilot Google Kubernetes Engine (GKE). Anda akan mempelajari cara menyiapkan workload sinkronisasi yang menginstal daftar yang diizinkan di cluster Anda dan terus memperbarui daftar yang diizinkan.

Halaman ini ditujukan untuk jenis peran berikut:

  • Engineer keamanan yang ingin memastikan bahwa workload pihak ketiga memerlukan daftar yang diizinkan untuk berjalan di cluster Anda dan berasal dari sumber yang disetujui GKE.
  • Engineer platform yang ingin mengaktifkan workload pihak ketiga di cluster untuk membantu tim aplikasi.

Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam dokumentasi kami, lihat Peran dan tugas pengguna GKE Enterprise umum.

Sebelum membaca halaman ini, pastikan Anda memahami hal-hal berikut:

Tentang workload partner yang memiliki hak istimewa di Autopilot

GKE mengizinkan subset partner yang disetujui untuk menjalankan workload istimewa di cluster Autopilot. Workload dengan hak istimewa ini dapat melewati beberapa batasan keamanan yang diterapkan Autopilot. Misalnya, partner mungkin perlu menjalankan workload yang menggunakan kemampuan Linux tertentu atau memerlukan container dengan hak istimewa.

Partner membuat dan memelihara daftar yang diizinkan untuk workload istimewa mereka. Setiap daftar yang diizinkan adalah file yang cocok dengan workload partner istimewa tertentu. Partner mengirimkan file daftar yang diizinkan ini ke GKE untuk mendapatkan persetujuan. Setelah disetujui, GKE akan menghosting file daftar yang diizinkan di repositori yang dikelola Google.

Untuk menjalankan workload partner, Anda menginstal file daftar yang diizinkan yang sesuai di cluster Anda. GKE menyediakan resource kustom Kubernetes bernama AllowlistSynchronizer yang menginstal daftar yang diizinkan dan terus memperbaruinya. Setelah penginstalan daftar yang diizinkan berhasil, Anda dapat men-deploy workload partner istimewa yang sesuai.

Bug dan permintaan fitur untuk workload dan daftar yang diizinkan yang memiliki hak istimewa

Partner bertanggung jawab untuk membuat, mengembangkan, dan memelihara workload istimewa dan daftar yang diizinkan. Jika Anda menemukan bug atau memiliki permintaan fitur untuk workload atau daftar yang diizinkan yang memiliki hak istimewa, hubungi partner yang bersangkutan.

Tentang pengontrol AllowlistSynchronizer

AllowlistSynchronizer adalah pengontrol yang berjalan di bidang kontrol GKE Anda. Anda men-deploy AllowlistSynchronizer baru sebagai manifes YAML, mirip dengan cara Anda men-deploy beban kerja Kubernetes lainnya. Dalam manifes, Anda menentukan jalur ke file daftar yang diizinkan yang ingin Anda instal, yang Anda dapatkan dari partner pihak ketiga. Penyinkron akan menemukan file daftar yang diizinkan partner di repositori yang dikelola Google dan menginstal daftar yang diizinkan di cluster Anda.

Setiap 10 menit, sinkronisasi akan memeriksa update pada file daftar yang diizinkan. Jika ada update, sinkronisasi akan menginstal daftar yang diizinkan yang telah diupdate di cluster Anda.

Untuk berhenti mengizinkan workload tertentu, perbarui AllowlistSynchronizer yang ada untuk menghapus jalur file daftar yang diizinkan yang sesuai, lalu hapus objek WorkloadAllowlist dari cluster Anda. Jika Anda menghapus objek WorkloadAllowlist yang diinstal tanpa menghapus jalur dari sinkronisasi daftar yang diizinkan, sinkronisasi akan menginstal ulang daftar yang diizinkan. Partner tidak dapat menghapus file daftar yang diizinkan dari repositori yang dikelola Google.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Persyaratan

  • Resource kustom AllowlistSynchronizer memerlukan GKE versi 1.32.2-gke.1652000 atau yang lebih baru.
  • Anda harus mengetahui workload partner mana yang ingin dijalankan di cluster Anda. Periksa dokumentasi partner Anda untuk mengetahui petunjuk menginstal beban kerja istimewa.

Buat AllowlistSynchronizer baru

Untuk menjalankan beban kerja yang memiliki hak istimewa dari partner, Anda menambahkan jalur ke file daftar yang diizinkan yang sesuai ke resource kustom AllowlistSynchronizer. Kemudian, Anda men-deploy AllowlistSynchronizer ke cluster Anda.

  1. Di editor teks, buat file YAML baru.
  2. Tambahkan konten berikut ke file YAML:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Ganti kode berikut:

    • ALLOWLIST_SYNCHRONIZER_NAME: nama sinkronisasi baru. Pilih nama deskriptif yang mengidentifikasi workload atau tim yang didukung daftar yang diizinkan.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: satu atau beberapa jalur ke file daftar yang diizinkan partner untuk diinstal. Periksa dokumentasi beban kerja partner yang Anda pilih untuk jalur ini. Anda dapat menentukan seluruh direktori atau file individual.
  3. Deploy file YAML ke cluster Anda:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ganti PATH_TO_YAML_FILE dengan jalur ke file YAML yang Anda buat di langkah sebelumnya.

    Pengontrol AllowlistSynchronizer yang diinstal memungkinkan file daftar yang diizinkan dari jalur yang ditentukan di cluster Anda.

  4. Tunggu hingga sinkronisasi melaporkan status Ready:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
      --timeout=60s
    

Anda juga dapat mengintegrasikan deployment workload partner ke dalam pipeline continuous integration dan continuous deployment (CI/CD) Anda. Konfigurasi alur kerja Anda untuk menunggu hingga daftar yang diizinkan berhasil diinstal sebelum men-deploy beban kerja yang sesuai.

Memperbarui AllowlistSynchronizer yang ada

Anda dapat memperbarui AllowlistSynchronizer yang ada untuk menambahkan atau menghapus file daftar yang diizinkan. Anda dapat memperbarui sinkronisasi yang ada dalam situasi seperti berikut:

  • Partner menambahkan file daftar yang diizinkan baru yang memiliki nama berbeda.
  • Anda ingin menambahkan daftar yang diizinkan untuk beban kerja baru ke sinkronisasi yang ada yang mengelompokkan daftar yang diizinkan terkait.
  • Anda ingin menghapus daftar yang diizinkan dari sinkronisasi karena Anda tidak ingin lagi menggunakan workload yang sesuai.

Untuk memperbarui objek AllowlistSynchronizer yang ada, lakukan hal berikut:

  1. Mencantumkan sinkronisasi yang ada di cluster Anda:

    kubectl get allowlistsynchronizer
    
  2. Buka spesifikasi sinkronisasi yang ingin Anda perbarui di editor teks.

  3. Perbarui kolom spec.allowlistPaths untuk menambahkan, mengubah, atau menghapus jalur file daftar yang diizinkan.

  4. Simpan dan tutup editor teks.

  5. Terapkan konfigurasi yang telah diupdate ke cluster:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ganti PATH_TO_YAML_FILE dengan jalur ke file YAML yang Anda perbarui di langkah sebelumnya.

Saat Anda men-deploy konfigurasi sinkronisasi yang diperbarui, kolom managedAllowlistStatus.generation di status objek AllowlistSynchronizer akan bertambah satu. Pengontrol AllowlistSynchronizer kemudian menerapkan perubahan Anda.

Memantau status sinkronisasi daftar yang diizinkan

Setelah menginstal AllowlistSynchronizer atau memperbarui sinkronisasi yang ada, Anda dapat memantau status sinkronisasi. Status ini membantu Anda melacak penginstalan, penghapusan, atau modifikasi file daftar yang diizinkan serta error yang mungkin terjadi.

Untuk memantau status umum sinkronisasi, jalankan perintah berikut:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

Outputnya mirip dengan hal berikut ini:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

Untuk mengetahui deskripsi kolom ini, lihat Status AllowlistSynchronizer.

Memastikan bahwa daftar yang diizinkan ada di cluster Anda

Untuk memverifikasi bahwa daftar yang diizinkan ada di cluster Anda, jalankan perintah berikut:

kubectl get workloadallowlist

Outputnya adalah daftar daftar yang diizinkan yang diinstal di cluster. Pastikan output menyertakan daftar yang diizinkan yang ingin Anda gunakan.

Men-deploy workload istimewa

Setelah penginstalan daftar yang diizinkan berhasil, Anda dapat men-deploy workload yang sesuai di cluster. Partner yang menyediakan workload juga harus memberi Anda petunjuk penginstalan untuk workload tersebut. Untuk mengetahui daftar partner Autopilot dan link ke dokumentasinya, lihat Partner Autopilot.

Menggunakan repositori mirror image pribadi

Anda dapat mencerminkan image container workload partner di repositori pribadi yang Anda miliki. Untuk menjalankan gambar yang dicerminkan ini dalam beban kerja, Anda harus memenuhi semua persyaratan berikut:

  • Ringkasan SHA-256 gambar yang dicerminkan harus cocok dengan ringkasan gambar beban kerja partner yang tersedia secara publik.
  • Ringkasan image SHA-256 yang Anda tentukan harus ada di objek WorkloadAllowlist yang disediakan oleh partner dan disinkronkan ke cluster Anda.

Jika workload partner mendukung image yang dicerminkan, spesifikasi daftar yang diizinkan untuk workload tersebut berisi daftar ringkasan image ke kolom containers.imageDigests dalam spesifikasi daftar yang diizinkan untuk workload tersebut. Biasanya, kolom ini memiliki ringkasan terpisah untuk setiap versi image container yang tersedia. Untuk melihat daftar ringkasan gambar ini, lakukan hal berikut:

  1. Pastikan daftar yang diizinkan ada di cluster Anda.
  2. Dapatkan spesifikasi daftar yang diizinkan yang diinstal:

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    Ganti ALLOWLIST_NAME dengan nama daftar yang diizinkan yang diinstal. Contoh, company-name-solution-v1.0.0.

    Untuk workload yang mendukung fitur ini, outputnya mirip dengan berikut ini. Kolom imageDigests memiliki daftar ringkasan yang diizinkan.

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    Jika output tidak menyertakan kolom imageDigests, atau jika ringkasan untuk rilis yang ingin Anda gunakan tidak ada dalam daftar, hubungi partner secara langsung dan minta mereka untuk memperbarui daftar yang diizinkan. Setelah partner menambahkan ringkasan gambar ke daftar yang diizinkan dan mengirimkan perubahan ke GKE, penyinkron daftar yang diizinkan di cluster Anda akan otomatis menginstal daftar yang diizinkan yang telah diupdate.

  3. Tambahkan salah satu ringkasan gambar yang didukung ke manifes workload Anda.

Misalnya, perhatikan gambar berikut dalam spesifikasi Pod yang tersedia secara publik dari partner:

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Anda dapat menggunakan image yang dicerminkan jika ringkasannya cocok dengan ringkasan yang tersedia secara publik, seperti dalam contoh berikut:

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Anda harus menyertakan ringkasan SHA-256 di kolom gambar, mirip dengan contoh sebelumnya. Jika ringkasan tidak cocok, gambar yang dicerminkan tidak akan berjalan. Untuk mempertahankan ringkasan gambar saat Anda mencerminkan gambar partner, pertimbangkan untuk menggunakan alat seperti crane, ORAS, atau skopeo.

Menghapus workload istimewa

Untuk berhenti mengizinkan workload istimewa berjalan di cluster Anda, hapus jalur ke daftar yang diizinkan yang sesuai dari AllowlistSynchronizer Anda. Penyinkronisasi akan meng-uninstal daftar yang diizinkan.

Jika Anda menghapus objek WorkloadAllowlist dari cluster, bukan memperbarui sinkronisasi, sinkronisasi akan menginstal ulang daftar yang diizinkan. Pastikan Anda menghapus jalur dari AllowlistSynchronizer.

Untuk meng-uninstal daftar yang diizinkan, lakukan hal berikut:

  1. Di manifes YAML untuk AllowlistSynchronizer yang mengelola daftar yang diizinkan, hapus jalur ke daftar yang diizinkan yang ingin Anda uninstal. Untuk mengetahui petunjuknya, lihat Memperbarui bagian AllowlistSynchronizer yang ada.
  2. Untuk memverifikasi bahwa daftar yang diizinkan telah di-uninstal, dapatkan daftar objek WorkloadAllowlist di cluster Anda:

    kubectl get workloadallowlist
    

    Dalam output, pastikan daftar yang diizinkan yang ingin Anda hapus tidak muncul.

  3. Hapus workload dari cluster Anda. Untuk mengetahui petunjuknya, lihat dokumentasi penyedia workload.

Mencegah penginstalan daftar yang diizinkan di cluster Anda

Untuk mencegah penginstalan daftar yang diizinkan untuk workload istimewa di cluster tertentu, gunakan ValidatingAdmissionPolicy. Kebijakan penerimaan yang valid memastikan bahwa resource Kubernetes memenuhi kriteria tertentu sebelum diizinkan untuk berjalan di cluster. Misalnya, Anda dapat memvalidasi bahwa label memiliki nilai tertentu.

Untuk mencegah penginstalan daftar yang diizinkan di cluster, lakukan hal berikut:

  1. Simpan manifes ValidatingAdmissionPolicy berikut sebagai disallow-allowlists.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: "disallow-allowlists"
    spec:
      failurePolicy: Fail
      matchConstraints:
        resourceRules:
        - apiGroups:   ["auto.gke.io"]
          apiVersions: ["*"]
          operations:  ["*"]
          resources:   ["allowlistsynchronizers"]
      validations:
      - expression: "false"
        message: 'AllowlistSynchronizer creation is not allowed'
    
  2. Simpan manifes ValidatingAdmissionPolicyBinding berikut sebagai disallow-allowlists-binding.yaml:

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. Deploy ValidatingAdmissionPolicy di cluster Anda:

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

Kebijakan ini mencegah pembuatan AllowlistSynchronizer baru di cluster.

Memecahkan masalah

Jika sinkronisasi atau deployment workload gagal, lihat Memecahkan masalah deployment workload Autopilot yang memiliki hak istimewa.

Langkah berikutnya