在對許可權要求相對較高的雲上的情境中,您需要將Pod的IP地址動態地加入或移出指定的RDS白名單,以實現對許可權最細粒度的控制。您可以通過ack-kubernetes-webhook-injector組件為Pod添加Annotation(註解),動態地將Pod的IP地址加入或移出指定的RDS白名單。本文介紹如何安裝並使用ack-kubernetes-webhook-injector組件為Pod動態配置阿里雲產品白名單,以及如何配置訪問雲產品內網Endpoint。
前提條件
已建立Kubernetes託管版叢集,具體操作,請參見建立Kubernetes託管版叢集。
已通過kubectl工具串連Kubernetes叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
叢集使用Terway網路模式。更多資訊,請參見使用Terway網路外掛程式。
組件介紹
在雲端運算的使用情境中,某些資源需要配置相應的安全性原則才能被外部存取,例如執行個體需要配置SLB存取控制策略,或者RDS資料庫需要配置訪問用戶端的源IP地址白名單。雖然在建立ACK叢集時可以將叢集節點的IP網段加入到指定RDS的白名單中,但此方案有如下缺點:
白名單規則粒度太粗,加入白名單的IP網段覆蓋了叢集所有節點和Pod的IP地址。
叢集刪除後白名單規則需手動清理。
為瞭解決上述問題,Container Service Kubernetes 版開發了ack-kubernetes-webhook-injector,支援將指定Pod的IP地址動態加入RDS白名單中,並且在Pod被刪除時,將其IP地址從白名單中移除,實現對安全性原則的細粒度控制。
目前,ack-kubernetes-webhook-injector支援以下功能:
隨著Pod的建立與刪除,自動將Pod的IP加入或移出指定的SLB存取控制策略組。
隨著Pod的建立與刪除,自動將Pod的IP加入或移出指定的阿里雲Redis白名單。
隨著Pod的建立與刪除,自動將Pod的IP加入或移出指定的RDS白名單。
安裝ack-kubernetes-webhook-injector
登入Container Service管理主控台,在左側導覽列選擇 。
選擇並單擊ack-kubernetes-webhook-injector,然後單擊右上方的一鍵部署。
在面板中,選擇安裝組件的目的地組群和命名空間,並設定名稱,然後單擊下一步。
在參數地區,填寫
openapi
欄位下的ak
、sk
為您的AK資訊,然後在頁面下方單擊確定。關於如何擷取AK資訊,請參見擷取AccessKey。
使用ack-kubernetes-webhook-injector動態添加RDS白名單樣本
在Pod副本控制器的Pod Spec中,您可以使用Annotation指定Pod需加入的RDS執行個體ID和RDS白名單分組名稱。Pod建立時,ack-kubernetes-webhook-injector會將Pod的IP地址加入到白名單中,並且在Pod刪除時移除規則。
Pod的Annotation需包括的RDS白名單如下:
RDS執行個體ID:
ack.aliyun.com/rds_id
RDS白名單分組名稱:
ack.aliyun.com/white_list_name
本文以自動添加RDS白名單規則為例,展示如何使用ack-kubernetes-webhook-injector為Pod動態添加安全規則。
使用以下YAML樣本建立一個Deployment,在其中的Pod定義中加入RDS執行個體ID和RDS白名單分組名稱的Annotation。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: inject-test name: inject-test spec: replicas: 1 selector: matchLabels: app: inject-test template: metadata: annotations: ack.aliyun.com/rds_id: <rm-wz9nanjcud75b****> ack.aliyun.com/white_list_name: <rds_group> labels: app: inject-test spec: containers: - command: - sleep - "3600" image: alpine:latest name: inject-test
執行以下命令,查看Pod的IP地址。
kubectl --kubeconfig .kube/config_sts_test -n inject-test get pod -o wide
預期輸出:
NAME READY STATUS RESTARTS AGE IP NODE inject-test-68cc8f9bbf-gj86n 1/1 Running 0 22s 172.25.0.28 cn-hangzhou.xxx
預期輸出中,Pod的IP地址為172.25.0.28。
登入RDS控制台,查看Annotation中RDS執行個體中的白名單。有關如何查看RDS的白名單,請參見高安全白名單模式IP白名單。
將步驟1中的Deployment的副本數設定為0,再次查看RDS白名單。
此時,控制台顯示已建立的規則被自動刪除。
配置訪問雲產品內網Endpoint
ack-kubernetes-webhook-injector預設使用雲產品公網Endpoint。如果您的叢集未開啟公網訪問能力,可以通過修改配置,選擇訪問雲產品內網Endpoint。
部分雲產品在特定地區沒有內網Endpoint。配置前,請在OpenAPI門戶查詢目標產品的地區下是否提供內網Endpoint。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在頁面頂部命名空間下拉式清單中,選擇kube-system命名空間,找到kubernetes-webhook-injector對應的Deployment,然後單擊目標Deployment右側操作列下的更多 > 查看Yaml。
在
spec.template.spec.containers.command
下方增加- '--intranet-access'
一行,然後單擊更新。
更多安全性原則配置規則
ack-kubernetes-webhook-injector也支援以下安全性原則配置:
SLB存取控制:
ack.aliyun.com/access_control_policy_id
。阿里雲Redis白名單配置:
Redis ID:
ack.aliyun.com/redis_id
。Redis白名單分組:
ack.aliyun.com/redis_white_list_name
。
卸載ack-kubernetes-webhook-injector
如果您不再使用ack-kubernetes-webhook-injector,可以在ACK發布功能中將其刪除。具體操作,請參見基於Helm的發行管理。同時,請執行以下命令清理配置資訊。
kubectl -n kube-system delete secret kubernetes-webhook-injector-certs
kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io kubernetes-webhook-injector