目录

Node-Metadata-Protection-节点的元数据保护

Node Metadata Protection–节点的元数据保护

https://i-blog.csdnimg.cn/blog_migrate/0a8ea9b1e62d675a4aa6b7083dcd497a.png

1. 关于元数据

kubernets集群不管是运行与公有云还是私有云,都是有些元数据的资源的各种各样的标签。比如镜像id,网络设备id,硬盘的唯一id等。

2. 举一个例子

2.1 cloud platform node metadata 云平台节点元数据

  1. 拿谷歌云和亚马逊云来说
  2. 默认的情况下可以从虚拟机vm(云主机)访问元数据服务的api
  3. 元数据中保护有vm节点(云主机)的各种凭据信息。如网络id,镜像id vpcid.硬盘等待各种相关信息。具体详细度要看云商平台或者私有云架构
  4. 可以包含诸如kubelet凭证之类的置备数据

https://i-blog.csdnimg.cn/blog_migrate/1e63f6e854308c8a800e441f08ef1892.png

2.2 access sensitive node metadta 访问敏感节点元数据的原则

2.2.1 最常说的权限控制原则

  1. Limitat permissions for instance credentials 权限最小化原则。
  2. 确保cloud-instance-account仅具有必要的权限
  3. 每个云提供商都应遵循一系列建议
  4. 权限控制不在kubernetes中

https://i-blog.csdnimg.cn/blog_migrate/f6aa44627911c7d5ab8ae7022d4a542a.png

3. restrict access using networkpolicies 使用网络策略限制访问

https://i-blog.csdnimg.cn/blog_migrate/8bb33eab705ad623f9899c615175f170.png

3.1 限制访问云商的元数据

https://i-blog.csdnimg.cn/blog_migrate/8ad74b212cab9504d6ee6805845bc36c.png

由于没有谷歌云拿腾讯云意淫下了,可能理解的不是很对。往指教:

翻了下腾讯云的文档关于元数据也有文档:

https://i-blog.csdnimg.cn/blog_migrate/6cd659ee5366b8dea32f2d515d40ea33.png

就简单的证明一下,node节点和pod节点都可以访问云商的源数据。相对于谷歌云的文档,腾讯的还是略简单,想比着课程查询下硬盘,貌似还是没有这接口的。不过觉得下面这话说的很对,能访问实例就可以查看元数据。关于元数据的安全也很重要啊…

https://i-blog.csdnimg.cn/blog_migrate/22a30d559c7bef03b3d9186c376b6e62.png

3.2通过networkpolicy 限制对元数据的访问

ping metadata.tencentyun.com得到medata的地址169.254.0.23,依然是命名空间级别的限制

https://i-blog.csdnimg.cn/blog_migrate/a6edab776aeb3fa89933d422e437f9ac.png

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了

https://i-blog.csdnimg.cn/blog_migrate/384822e3060d4461c2cea41dfb999fe0.png

然后我如何运行一组pod去访问元数据呢?

https://i-blog.csdnimg.cn/blog_migrate/09cfedc8df9b780dc6656910b6241036.png

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

https://i-blog.csdnimg.cn/blog_migrate/58ed032b8bbc9474942536a9ca8022f1.png

OK,可以返回元数据了。now现在去掉role=metadata-accessor 的标签

https://i-blog.csdnimg.cn/blog_migrate/74c77474a9b9d1e86c12025db56c3611.png

验证通过,其实我觉这节课主要的还是再强调networkpolicy。不仅仅是元数据的保护。networkpolicy是很重要的基石。