在对权限要求相对较高的云上的场景中,您需要将Pod的IP地址动态的加入或移出指定的RDS白名单,以实现对权限最细粒度的控制。您可以通过ack-kubernetes-webhook-injector组件为Pod添加Annotation(注解),动态的将Pod的IP地址加入或移出指定的RDS白名单。本文介绍如何安装并使用ack-kubernetes-webhook-injector组件为Pod动态配置阿里云产品白名单。
前提条件
- 已创建Kubernetes托管版集群,具体操作,请参见创建Kubernetes托管版集群。
- 已通过kubectl工具连接Kubernetes集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
- 集群使用Terway网络模式。更多信息,请参见使用Terway网络插件。
背景信息
在云计算的使用场景中,某些资源需要配置相应的安全策略才能被外部访问,例如实例需要配置SLB访问控制策略,或者RDS数据库需要配置访问客户端的源IP地址白名单。虽然在创建ACK集群时可以将集群节点的IP网段加入到指定RDS的白名单中,但此方案有如下缺点:
- 白名单规则粒度太粗,加入白名单的IP网段覆盖了集群所有节点和Pod的IP地址。
- 集群删除后白名单规则需手动清理。
为了解决上述问题,阿里云容器服务ACK团队开发了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
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,选择 。
- 选择并单击ack-kubernetes-webhook-injector。
- 在参数页签,将
use_aksk
的值设置为true
,并设置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-wz9nanjcud75bxxxx> 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 STATS 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白名单。查看已创建的规则被自动删除。
卸载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
更多安全策略配置规则
ack-kubernetes-webhook-injector也支持以下安全策略配置:
- SLB访问控制:
ack.aliyun.com/access_control_policy_id
。 - 阿里云Redis白名单配置:
- Redis ID:
ack.aliyun.com/redis_id
。 - Redis白名单分组:
ack.aliyun.com/white_list_name
。
- Redis ID: