在 kubeadm 集群上配置 PodSecurityPolicy

pmc*_*ath 6 kubernetes kubernetes-security

我尝试使用 kubeadm 在 ubuntu 16.04 上安装的 1.10.1 集群上设置 PodSecurityPolicy,已按照https://kubernetes.io/docs/concepts/policy/pod-security-policy/ 上的说明进行操作

所以我改变了API服务器清单上的主,在/etc/kubernetes/manifests/kube-apiserver.yaml 加入",PodSecurityPolicy"--admission-controlARG

当我执行此操作并运行kubectl get pods -n kube-system api-server 未列出时,显然我已经设法命中 apiserver 的一个正在运行的实例,因为我获得了 kube-system 命名空间中所有其他 pod 的列表

我可以看到一个新的 docker 容器已经使用 PodSecurityPolicy 准入控制器启动,它显然正在服务 kubectl 请求

当我检查 kubelet 日志时,journalctl -u kubelet我可以看到

Apr 15 18:14:23 pmcgrath-k8s-3-master kubelet[993]: E0415 18:14:23.087361 993 kubelet.go:1617] Failed creating a mirror pod for "kube-apiserver-pmcgrath-k8s-3-master_kube-system(46dbb13cd345f9fbb9e18e2229e2e dd1)": pods "kube-apiserver-pmcgrath-k8s-3-master" is forbidden: unable to validate against any pod security policy: []

我已经添加了一个特权 PSP 并创建了一个集群角色和绑定并确认 PSP 正在工作

只是不知道为什么 apiserver kubelet 会出现这个错误,因此没有出现在 pod 列表中,本来以为 kubelet 创建了这个 pod,但不确定我是否必须为 apiserver、控制器管理器、调度程序和 kube 创建角色绑定-域名解析

没有说明如何处理这个问题的文档,我认为这是一个先有鸡还是先有蛋的情况,我必须引导集群,添加一些 PSP、ClusterRoles 和 ClusterRolebindings,然后才能改变 api 服务器的准入控制参数

任何人都有同样的问题或对此有任何指示?

谢谢帕特

pmc*_*ath 3

我写了一篇关于我如何解决这个问题的博客文章,简短的回答是

  • 在 master 上运行 kubeadm init 并启用 PodSecurityPolicy 准入控制器
  • 使用 RBAC 配置添加一些 pod 安全策略 - 足以允许 CNI 和 DNS 等启动
    • 如果没有这个,CNI 守护进程将不会启动
  • 通过kubeadm join完成集群添加节点配置
  • 当您向集群添加更多工作负载时,请检查是否需要额外的 Pod 安全策略和 RBAC 配置

请参阅https://pmcgrath.net/using-pod-security-policies-with-kubeadm