開放策略代理(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.yaml和sleep.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
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 ---
執行以下命令,在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代理注入范圍是否成功。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在OPA策略頁面,選中啟用開放策略代理OPA插件和啟用OPA注入范圍控制,單擊開啟OPA功能,在提示對話框,單擊確定。
步驟二:為命名空間添加標簽
下文介紹如何在ACK控制臺上為default命名空間添加opa-istio-injection=enabled
標簽。您也可以通過kubectl工具連接集群,執行kubectl label namespace default opa-istio-injection=enabled --overwrite
命令,為命名空間添加標簽。關于連接集群的具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇命名空間與配額。
在命名空間頁面,單擊default命名空間右側操作列下的編輯。
在編輯命名空間對話框,設置標簽名稱為opa-istio-injection,值為enabled,單擊添加,然后單擊確定。
步驟三:重啟應用
通過刪除Pod的方式使應用重啟。重啟應用后,會自動注入OPA Sideacr代理。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇
。在容器組頁面頂部,設置命名空間為default,單擊Nginx應用Pod右側操作列下的 ,在提示對話框,單擊確定。
如果應用下有多個Pod,您需要刪除多個Pod,使應用重啟。Pod狀態顯示為Running,說明Pod重啟成功。
重復執行以上操作,重啟develop命名空間下Sleep應用的Pod。
步驟四:驗證控制OPA注入范圍是否成功
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇
。在容器組頁面,查看Nginx和Sleep應用是否注入OPA Sidecar代理。
設置命名空間為default,單擊Nginx應用的名稱,在容器頁簽下可以看到opa-istio,說明Nginx應用注入OPA Sidecar代理。
設置命名空間為develop,單擊Sleep應用的名稱,在容器頁簽下沒有看到opa-istio,說明Sleep應用未注入OPA Sidecar代理。
通過以上操作,可以看到啟用OPA注入范圍控制功能后,添加
opa-istio-injection=enabled
標簽的命名空間下的應用注入了OPA Sidecar代理,沒有添加opa-istio-injection=enabled
標簽的命名空間下的應用未注入了OPA Sidecar代理,說明控制OPA注入范圍成功。