- content
{:toc
1. 关于元数据
kubernets集群不管是运行与公有云还是私有云,都是有些元数据的资源的各种各样的标签。比如镜像id,网络设备id,硬盘的唯一id等。
2. 举一个例子
2.1 cloud platform node metadata 云平台节点元数据
- 拿谷歌云和亚马逊云来说
- 默认的情况下可以从虚拟机vm(云主机)访问元数据服务的api
- 元数据中保护有vm节点(云主机)的各种凭据信息。如网络id,镜像id vpcid.硬盘等待各种相关信息。具体详细度要看云商平台或者私有云架构
- 可以包含诸如kubelet凭证之类的置备数据
2.2 access sensitive node metadta 访问敏感节点元数据的原则
2.2.1 最常说的权限控制原则
- Limitat permissions for instance credentials 权限最小化原则。
- 确保cloud-instance-account仅具有必要的权限
- 每个云提供商都应遵循一系列建议
- 权限控制不在kubernetes中
3. restrict access using networkpolicies 使用网络策略限制访问
3.1 限制访问云商的元数据
由于没有谷歌云拿腾讯云意淫下了,可能理解的不是很对。往指教: 翻了下腾讯云的文档关于元数据也有文档:https://cloud.tencent.com/document/product/213/4934?from=10680 就简单的证明一下,node节点和pod节点都可以访问云商的源数据。相对于谷歌云的文档,腾讯的还是略简单,想比着课程查询下硬盘,貌似还是没有这接口的。不过觉得下面这话说的很对,能访问实例就可以查看元数据。关于元数据的安全也很重要啊……
3.2通过networkpolicy 限制对元数据的访问
ping metadata.tencentyun.com得到medata的地址169.254.0.23,依然是命名空间级别的限制
kubectl apply -f deny.yaml
kubectl -n metadata exec nginx -it bash
curl http://metadata.tencentyun.com/latest/meta-data/instance/image-id
OK,如下图获取不了元数据中的镜像id了 然后我如何运行一组pod去访问元数据呢?
kubectl apply -f allow.yaml
嗯 matchLabels我设置了一个不存在的,然后给pods加上labels
kubectl get pods --show-labels -n metadata
kubectl label pod nginx role=metadata-accessor -n metadata
kubectl get pods --show-labels -n metadata
kubectl -n metadata exec nginx -it bash
OK,可以返回元数据了。now现在去掉role=metadata-accessor 的标签 验证通过,其实我觉这节课主要的还是再强调networkpolicy。不仅仅是元数据的保护。networkpolicy是很重要的基石。