全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Kontrol ruang lingkup injeksi proxy sidecar OPA

更新时间:Jul 02, 2025

Open Policy Agent (OPA) memungkinkan Anda menentukan kebijakan kontrol akses setelah menyuntikkan proxy sidecar OPA ke dalam aplikasi. Untuk menerapkan otorisasi dan kontrol akses yang mendetail pada aplikasi di namespace tertentu, aktifkan fitur pengendalian ruang lingkup injeksi proxy sidecar OPA. Proxy sidecar OPA hanya disuntikkan ke pod di namespace dengan label opa-istio-injection=enabled.

Prasyarat

  • Sebuah kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance Service Mesh (ASM) versi 1.12.4.19 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan Kluster ke Instance ASM.

  • Dua namespace bernama default dan develop telah dibuat. Untuk informasi lebih lanjut, lihat Kelola Namespace dan Kuota Sumber Daya.

  • Aplikasi NGINX diterapkan di namespace default dan aplikasi sleep diterapkan di namespace develop. Untuk informasi lebih lanjut, lihat Buat Aplikasi Tanpa Status Menggunakan Deployment.

    Tunjukkan Cara Membuat Aplikasi NGINX dan Aplikasi Sleep

    1. Buat file nginx.yaml dan sleep.yaml dengan kode yang sesuai seperti yang ditunjukkan dalam blok kode berikut:

      nginx.yaml

      apiVersion: apps/v1 # untuk versi sebelum 1.9.0 gunakan apps/v1beta2
      kind: Deployment
      metadata:
        name: nginx-deployment
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
              sidecarset-injected: "true"
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
      spec:
        ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: 80
        selector:
          app: nginx
        type: ClusterIP

      sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Jalankan perintah berikut untuk menerapkan aplikasi NGINX di namespace default dan aplikasi sleep di namespace develop:

      kubectl apply -f nginx.yaml -n default
      kubectl apply -f sleep.yaml -n develop

Langkah 1: Aktifkan Plugin OPA dan fitur pengendalian ruang lingkup injeksi proxy sidecar OPA

Dalam contoh ini, setelah Anda mengaktifkan plugin OPA dan fitur pengendalian ruang lingkup injeksi proxy sidecar OPA, tambahkan label opa-istio-injection=enabled ke namespace default dan jangan tambahkan label opa-istio-injection=enabled ke namespace develop. Verifikasi bahwa ruang lingkup injeksi proxy sidecar OPA dikendalikan dengan memeriksa apakah proxy sidecar OPA disuntikkan ke kedua aplikasi NGINX dan aplikasi sleep.

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih Mesh Security Center > OPA Policy.

  3. Di halaman OPA Policy, pilih Enable Open Policy Agent (OPA) Plug-in dan Enable OPA Injection Range Control, lalu klik Enable OPA. Dalam pesan Note, klik OK.

Langkah 2: Tambahkan label yang diperlukan ke namespace

Bagian berikut menjelaskan cara menambahkan label opa-istio-injection=enabled ke namespace default di Konsol ACK. Anda juga dapat menggunakan kubectl untuk terhubung ke kluster ACK dan menjalankan perintah kubectl label namespace default opa-istio-injection=enabled --overwrite untuk menambahkan label opa-istio-injection=enabled ke namespace default. Untuk informasi lebih lanjut tentang cara terhubung ke kluster, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.

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

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi sebelah kiri, klik Namespaces and Quotas.

  3. Di halaman Namespace, klik Edit di kolom Actions dari namespace default.

  4. Di kotak dialog Edit Namespace, atur nama label menjadi opa-istio-injection, atur nilai label menjadi enabled, klik Add, lalu klik OK.

Langkah 3: Mulai ulang aplikasi

Pada langkah ini, mulai ulang aplikasi dengan menghapus pod. Setelah aplikasi dimulai ulang, proxy sidecar OPA secara otomatis disuntikkan ke aplikasi jika namespace tempat aplikasi tersebut berada memiliki label yang diperlukan.

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

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih Workloads > Pods.

  3. Di bagian atas halaman Pods, atur Namespace menjadi default dan pilih More > Delete di kolom Actions dari pod tempat aplikasi NGINX diterapkan. Di kotak dialog Note, klik OK.

    Jika aplikasi memiliki beberapa pod, Anda perlu menghapus semua pod tersebut untuk memulai ulang aplikasi. Jika status pod adalah Running, pod tersebut dimulai ulang.

  4. Ulangi operasi sebelumnya di langkah ini untuk memulai ulang pod aplikasi sleep di namespace develop.

Langkah 4: Periksa apakah pengendalian ruang lingkup injeksi berhasil

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

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih Workloads > Pods.

  3. Di halaman Pods, periksa apakah proxy sidecar OPA disuntikkan ke aplikasi NGINX dan sleep.

    • Atur Namespace menjadi default dan klik nama pod aplikasi NGINX. opa-istio ditampilkan di tab Container, yang menunjukkan bahwa proxy sidecar OPA disuntikkan ke aplikasi NGINX.注入OPA

    • Atur Namespace menjadi develop dan klik nama pod aplikasi sleep. opa-istio tidak ditampilkan di tab Container, yang menunjukkan bahwa tidak ada proxy sidecar OPA yang disuntikkan ke aplikasi sleep.sleep

    Hasil verifikasi menunjukkan bahwa setelah mengaktifkan fitur pengendalian ruang lingkup injeksi proxy sidecar OPA, proxy sidecar OPA disuntikkan hanya ke aplikasi yang berada di namespace dengan label opa-istio-injection=enabled. Ini berarti Anda telah berhasil mengendalikan ruang lingkup injeksi proxy sidecar OPA.