Kubernetes 是一种用于自动化部署、扩展和管理容器化应用程序的开源平台。在使用 Kubernetes 进行应用程序部署时,安全性非常重要。本文将介绍 Kubernetes 下的安全配置及实践。
Kubernetes 安全配置
访问控制
Kubernetes 使用 Role-Based Access Control (RBAC) 来限制对 Kubernetes 资源的访问。RBAC 基于用户、角色和权限的概念。可以通过以下步骤进行 RBAC 配置:
创建一个 ServiceAccount:
apiVersion: v1 kind: ServiceAccount metadata: name: my-service-account
创建一个 ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-cluster-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"]
将 ServiceAccount 与 ClusterRole 绑定:
-- -------------------- ---- ------- ----------- ---------------------------- ----- ------------------ --------- ----- ----------------------- --------- - ----- -------------- ----- ------------------ -------- ----- ----------- ----- --------------- --------- -------------------------
网络安全
Kubernetes 中的 Pod 之间可以相互通信,但需要进行网络隔离。以下是几种 Kubernetes 网络安全措施:
使用 NetworkPolicy 对 Pod 进行网络隔离:
-- -------------------- ---- ------- ----------- -------------------- ----- ------------- --------- ----- ----------------- ----- ------------ ------------ ---- ------ ------------ - ------- - ------ -------- - ----- - ------------ ------------ ---- -------- ------ - --------- --- ----- -- ------- - --- - ------------ ------------ ---- -------- ------ - --------- --- ----- ---
上述 NetworkPolicy 会将标签为
app: my-app
的 Pod 与标签为app: my-app-2
的 Pod 进行 TCP 80 端口通信,同时将标签为app: my-app
的 Pod 与标签为app: my-app-3
的 Pod 进行 TCP 443 端口通信。使用 NetworkPolicy 阻止 Pod 访问外部网络:
-- -------------------- ---- ------- ----------- -------------------- ----- ------------- --------- ----- --------------------- ----- ------------ -- ------------ - ------ ------- - --- - -------- ----- ---------
上述 NetworkPolicy 会阻止所有 Pod 访问外部网络。
容器安全
容器是 Kubernetes 上运行的应用程序的基本单位,因此容器安全非常重要。以下是几种 Kubernetes 容器安全措施:
使用 SecurityContext 限制容器的权限:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---------------- ---------- ---- ------------- ---- - --------- ------ - -------------- --
上述 SecurityContext 会将容器的用户 ID 限制为 1000,并添加 NET_ADMIN 权限。
使用 PodSecurityPolicy 限制 Pod 的权限:
-- -------------------- ---- ------- ----------- -------------- ----- ----------------- --------- ----- ---------------------- ----- ----------- ----- -------- ----- -------- ---------- ----- ---------------- -------- ----- -------- -------- - ---
上述 PodSecurityPolicy 会禁用特权容器,并要求 Pod 以非 root 用户身份运行。
Kubernetes 安全实践
使用 Kubernetes Dashboard 安全地管理集群
Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。可以通过以下步骤安全地管理集群:
创建一个 ServiceAccount:
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system
创建一个 ClusterRoleBinding 将 ServiceAccount 与 ClusterRole 绑定:
-- -------------------- ---- ------- ----------- ---------------------------- ----- ------------------ --------- ----- --------------- -------- --------- ------------------------- ----- ----------- ----- ------------- --------- - ----- -------------- ----- --------------- ---------- -----------
使用 kubectl proxy 命令启动代理:
kubectl proxy
在浏览器中访问以下 URL:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
在登录页面中选择 "Token" 登录,并输入刚刚创建的 ServiceAccount 的 Token。
使用 Istio 实现微服务安全
Istio 是一个开源的服务网格,它提供了流量管理、安全、可观察性和策略执行等功能。可以通过以下步骤使用 Istio 实现微服务安全:
使用 Istio 安装文件安装 Istio:
istioctl install
创建一个 Kubernetes Secret:
kubectl create secret generic my-secret --from-literal=username=my-username --from-literal=password=my-password
创建一个 Gateway:
-- -------------------- ---- ------- ----------- ---------------------------- ----- ------- --------- ----- ---------- ----- --------- ------ -------------- -------- - ----- ------- --- ----- ----- --------- ----- ---- ----- ------ --------------- --------- ------ - -------
上述 Gateway 会将流量转发到标签为
istio: ingressgateway
的 Pod,并使用 TLS。创建一个 VirtualService:
-- -------------------- ---- ------- ----------- ---------------------------- ----- -------------- --------- ----- ------------------ ----- ------ - ------- --------- - ---------- ----- - ------ - ---- ------- -------- ------ - ------------ ----- ---------- ------- --
上述 VirtualService 会将路径为
/my-path
的流量转发到标签为app: my-service
的 Pod 的子集v1
。
结论
本文介绍了 Kubernetes 下的安全配置及实践。在使用 Kubernetes 进行应用程序部署时,安全性非常重要。通过访问控制、网络安全和容器安全等措施,可以保护 Kubernetes 环境的安全。同时,使用 Kubernetes Dashboard 和 Istio 等工具可以更加方便地管理和保护 Kubernetes 集群。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6743c4aef3dd65303297a83e