全部產品
Search
文件中心

Alibaba Cloud Service Mesh:控制OPA Sidecar代理注入的範圍

更新時間:Jun 30, 2024

開放策略代理(OPA)外掛程式通過為應用注入OPA Sidecar代理來定義存取控制策略。當您需要對特定命名空間的應用程式進行精細化授權和存取控制時,可以啟用OPA注入範圍控制功能,僅添加了opa-istio-injection=enabled標籤的命名空間下的Pod會注入OPA Sidecar代理,實現更細粒度的存取控制。

前提條件

  • 已添加叢集到ASM執行個體,且ASM執行個體為1.12.4.19及以上版本。具體操作,請參見添加叢集到ASM執行個體

  • 已建立default和develop命名空間。具體操作,請參見管理命名空間與配額

  • 已在default命名空間下部署Nginx應用,在develop命名空間下部署Sleep應用。更多資訊,請參見建立無狀態工作負載Deployment

    展開查看如何建立Nginx和Sleep應用

    1. 使用以下內容,建立nginx.yaml和sleep.yaml。

      nginx.yaml

      apiVersion: apps/v1 # for versions before 1.9.0 use 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. 執行以下命令,在default命名空間下部署Nginx應用,在develop命名空間下部署Sleep應用。

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

步驟一:啟用OPA外掛程式和注入範圍控制

本文啟用OPA外掛程式和注入範圍控制後,為default命名空間添加opa-istio-injection=enabled標籤,develop命名空間則不添加opa-istio-injection=enabled標籤,查看Nginx應用和Sleep應用是否都注入OPA Sidecar代理,從而驗證控制OPA Sidecar代理注入範圍是否成功。

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格資訊安全中心 > OPA策略

  3. OPA策略頁面,選中啟用開放策略代理OPA外掛程式啟用OPA注入範圍控制,單擊開啟OPA功能,在提示對話方塊,單擊確定

步驟二:為命名空間添加標籤

下文介紹如何在ACK控制台上為default命名空間添加opa-istio-injection=enabled標籤。您也可以通過kubectl工具串連叢集,執行kubectl label namespace default opa-istio-injection=enabled --overwrite命令,為命名空間添加標籤。關於串連叢集的具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇命名空間與配額

  3. 命名空間頁面,單擊default命名空間右側操作列下的編輯

  4. 編輯命名空間對話方塊,設定標籤名稱為opa-istio-injection,值為enabled,單擊添加,然後單擊確定

步驟三:重啟應用

通過刪除Pod的方式使應用重啟。重啟應用後,會自動注入OPA Sideacr代理。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 容器組

  3. 容器組頁面頂部,設定命名空間default,單擊Nginx應用Pod右側操作列下的更多 > 刪除,在提示對話方塊,單擊確定

    如果應用下有多個Pod,您需要刪除多個Pod,使應用重啟。Pod狀態顯示為Running,說明Pod重啟成功。

  4. 重複執行以上操作,重啟develop命名空間下Sleep應用的Pod。

步驟四:驗證控制OPA注入範圍是否成功

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 容器組

  3. 容器組頁面,查看Nginx和Sleep應用是否注入OPA Sidecar代理。

    • 設定命名空間default,單擊Nginx應用的名稱,在容器頁簽下可以看到opa-istio,說明Nginx應用注入OPA Sidecar代理。注入OPA

    • 設定命名空間develop,單擊Sleep應用的名稱,在容器頁簽下沒有看到opa-istio,說明Sleep應用未注入OPA Sidecar代理。sleep

    通過以上操作,可以看到啟用OPA注入範圍控制功能後,添加opa-istio-injection=enabled標籤的命名空間下的應用注入了OPA Sidecar代理,沒有添加opa-istio-injection=enabled標籤的命名空間下的應用未注入了OPA Sidecar代理,說明控制OPA注入範圍成功。