打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
创建和分配Kubernetes Pod安全策略

Kubernetes是大多数企业的必备的容器管理和服务编排工具。但是随着Kubernetes中管理的容器越来越多,安全性可能就会成为一个问题。不仅容器中的应用需要具备完善的安全控制,而且容器和Pod所在运行环境的安全性。否则,企业将面临数据被盗窃等风险。
为此,应用在部署到Kubernetes集群时,Pod安全策略是必须要考虑的一件事。所以,本文想向你介绍创建Kubernetes Pod安全策略的基础知识,进而能帮助你实现可靠而安全的部署。

Kubernetes Pod是什么?

在我们深入研究安全策略之前,你可能需要首先了解Pod是什么:Pod是构成一个容器的过程的集合。这些过程可以包括:
  • 存储资源

  • 唯一的网络IP地址

  • 容器运行需要的配置信息

以上这些,可以称之为一个部署单元。这个单元可以是单个容器的形式,也可以是多个容器一起工作的形式(例如WordPress,NGINX和MySQL)。这些容器中的每个都有自己的配选项,但它们组合一起就可以成为一个有凝聚力的整体-Pod。
但是,如果没有整体安全性的管理手段,那么你将不得不管理各个容器的安全性。这就给Kubernetes开发人员带来了很大的麻烦。所以,我们需要Pod安全策略。

Pod安全策略

Pod安全策略,指的是Pod必须满足特定安全条件的配置,以便被Kubernetes集群接受。如果不满足条件,则Pod将会被拒绝。通过使用PodSecurityPolicy对象定义Pod安全策略,可以控制以下各项:
  • Pod运行特权容器( privileged containers )的能力。
  • Pod使用特权升级( privilege escalation )的能力。
  • Pod对存储卷类型的访问。
  • Pod对主机文件系统的访问。
  • Pod对主机网络对象和配置的使用。

但是如何定义Pod安全策略?让我们开始深入……

创建Kubernetes Pod安全策略

Pod安全策略可以在YAML文件中定义。
让我们创建一个新的Pod安全策略。该策略将执行以下操作(RunAsAny规则,该规则比runAsUser选项更自由宽松):
  • 禁用Pod运行特权容器。
  • 允许使用SELinux。
  • 允许使用Linux组。
  • 允许用户运行其他用户创建的容器。
  • 允许使用fsGroup。

例如,创建以下的YAML文件,nano no-privilege.yaml:
apiVersion: policy/v1beta1kind: PodSecurityPolicymetadata: name: no-privilegespec: privileged: false seLinux: rule: RunAsAny supplementalGroups: rule: RunAsAny runAsUser: rule: RunAsAny fsGroup: rule: RunAsAny volumes: - '*'
要应用新创建的Pod安全策略,使用如下命令:
kubectl apply -f no-privelege.yaml

当输出以下内容:
Podsecurity.policy/no-privilege created

说明你的Pod安全策略已经被应用。
如果你需要修改上面的Pod安全策略,则可以编辑YAML文件并重新运行kubectl apply命令就可以了。
也可以使用以下命令验证你的策略是否生效:
kubectl get psp no-privilege

它将打印出YAML文件中定义的Pod安全策略。

Pod安全策略
现在你已经知道如何创建了Pod安全策略,但你还需要了解…

如何分配Pod安全策略

角色的访问控制(RBAC)是kubernetes标准的授权模式,并且很容应用于Pod安全策略。借助RBAC,你可以将Pod安全策略分配给应用。
为此,我们将创建一个新的YAML文件,该文件不仅会创建集群范围的角色(使用ClusterRole定义),还将创建集群绑定(使用ClusterRoleBinding定义),以向每个经过身份验证的用户授予访问权限。
使用以下命令创建新文件:
nano rbac-noprivilege.yaml

在该文件中,粘贴以下内容:
首先,一个集群角色(clusterRole)需要被授权它想要的策略(使用use动词)。
然后,把集群角色与授权的用户绑定 。

kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata:  name: no-privilege:no-privilegerules:- apiGroups:  - extensions  resources:  - Podsecuritypolicies  resourceNames:  - no-privilege  verbs:  - use---
kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: no-privilege:no-privilegesubjects:- kind: Group name: system:authenticated apiGroup: rbac.authorization.k8s.ioroleRef: kind: ClusterRole name: no-privilege:no-privilege apiGroup: rbac.authorization.k8s.io

保存并关闭文件。通过以下命令应用集群角色:
kubectl apply -f rbac-noprivilege.yaml

上面的命令将打印出:
clusterrole.rbac.authorization.k8s.io/no-privilege:no-privilege createdclusterrolebinding.rbac.authorization.k8s.io/no-privilege:no-privilege created
现在,你可以通过以下命令使用新策略:
kubectl auth can-i use podsecuritypolicy/no-privilege

这时候,控制台会输出“yes”。
让我们检查一下是否任何其他用户可以通过以下命令,来使用新策略:
kubectl auth can-i use podsecuritypolicy/no-privilege --as-group=system:authenticated --as=any-user

这时候,控制台会输出““ no”。
现在,你已经创建并应用了第一个Kubernetes Pod安全策略。借助此技术,你可以大大增强Kubernetes中应用的安全性。
译者:王延飞
原文链接:https://thenewstack.io/tutorial-create-a-kubernetes-Pod-security-policy/

END

推荐:深圳6月19-21日,Kubernetes CKA实战培训

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
K8S 故障排错新手段:kubectl debug实战
Kubernetes用户的安全宝典:被黑和不被黑的11个途径
K8s 实践 | 如何解决多租户集群的安全隔离问题?
生产环境中的Kubernetes最佳实践
Kubernetes生产环境最佳实践
centos7 搭建 kubernetes1.16.7 集群 II (ingress)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服