image.png

1. 关于元数据

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

2. 举一个例子

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

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

image.png

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

2.2.1 最常说的权限控制原则

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

image.png

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

image.png

3.1 限制访问云商的元数据

image.png
由于没有谷歌云拿腾讯云意淫下了,可能理解的不是很对。往指教:
翻了下腾讯云的文档关于元数据也有文档:https://cloud.tencent.com/document/product/213/4934?from=10680
image.png
就简单的证明一下,node节点和pod节点都可以访问云商的源数据。相对于谷歌云的文档,腾讯的还是略简单,想比着课程查询下硬盘,貌似还是没有这接口的。不过觉得下面这话说的很对,能访问实例就可以查看元数据。关于元数据的安全也很重要啊…
image.png

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

ping metadata.tencentyun.com得到medata的地址169.254.0.23,依然是命名空间级别的限制
image.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了
image.png
然后我如何运行一组pod去访问元数据呢?
image.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

image.png
OK,可以返回元数据了。now现在去掉role=metadata-accessor 的标签
image.png
验证通过,其实我觉这节课主要的还是再强调networkpolicy。不仅仅是元数据的保护。networkpolicy是很重要的基石。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐