K8S 九 安全认证 TLS
目录
- 第九章 安全认证
- 访问控制概述
- 认证管理
- 授权管理 RBAC
- RBAC
- Role
- rules中的参数
- RoleBinding
- 9.4 准入控制
- 其他
- K8S的TLS是什么(DeepSeek)
- 1. 加密通信
- 2. 身份认证(Authentication)
- 3. 数据完整性
- K8s 中 TLS 的具体应用
- **1. API Server 的 TLS 配置**
- **2. etcd 的 TLS 配置**
- **3. kubelet 的 TLS 配置**
- **4. Ingress 的 TLS 配置**
- **4. 证书管理**
- **为什么必须使用 TLS?**
- **总结**
第九章 安全认证
实战内容参考
K8S 75 kubernetes-1.29 部署 ingress-nginx1.10
访问控制概述
认证管理
HTTPS证书认证:基于CA根证书签名的双向数字证书认证方式。
这种认证方式是安全性最高的一种方式,但同时也是操作起来最麻烦的一种方式。
授权管理 RBAC
RBAC
Role
rules中的参数
RoleBinding
cr
实战
创建Role和RoleBinding,为devUser用户授权
9.4 准入控制
了解原理
当前可配置的Admission Control准入控制如下:
其他
K8S的TLS是什么(DeepSeek)
K8S的TLS是什么,怎样使用(询问 DeepSeek AI的问题)
Kubernetes(k8s)使用 TLS(Transport Layer Security) 是为了确保集群内外的通信安全,防止数据泄露、篡改和中间人攻击。以下是 TLS 在 Kubernetes 中的核心作用及具体应用场景:
1. 加密通信
TLS 对 Kubernetes 组件之间的通信进行加密,保护敏感数据(如认证令牌、配置信息、Pod 日志等)不被窃取。
- 核心场景:
- API Server 与客户端(如 kubectl):所有通过 HTTPS 的请求和响应均加密。
- API Server 与 etcd:API Server 与 etcd 存储集群状态数据的通信需加密。
- 节点间通信:kubelet、kube-proxy 与 API Server 的交互需加密。
- Service 流量:通过 Ingress 暴露的 HTTPS 服务(如 Web 应用)使用 TLS 证书。
2. 身份认证(Authentication)
TLS 证书用于验证组件或用户的身份,确保只有授权的实体可以访问集群资源。
- 核心场景:
- 组件间认证:
- API Server 验证 kubelet、scheduler、controller-manager 的客户端证书。
- etcd 验证 API Server 的客户端证书。
- 用户认证:
- kubectl 使用客户端证书或 Token 向 API Server 证明身份。
- Service Account:Pod 内应用通过 TLS 证书与 API Server 安全通信。
- 组件间认证:
3. 数据完整性
TLS 确保传输的数据未被篡改,防止中间人攻击(MITM)。
- 核心场景:
- 配置下发:确保 kubelet 收到的 Pod 定义来自合法的 API Server。
- Secret 传输:加密敏感信息(如密码、密钥)的传输过程。
K8s 中 TLS 的具体应用
1. API Server 的 TLS 配置
API Server 是集群的“网关”,所有请求必须通过 TLS 加密和认证。
- 服务端证书:API Server 使用 TLS 证书对外提供 HTTPS 服务。
- 客户端证书:
kubectl
、kubelet 等组件需提供有效证书才能访问 API Server。
# API Server 启动参数示例(/etc/kubernetes/manifests/kube-apiserver.yaml)
spec:containers:- command:- kube-apiserver- --tls-cert-file=/etc/kubernetes/pki/apiserver.crt # 服务端证书- --tls-private-key-file=/etc/kubernetes/pki/apiserver.key- --client-ca-file=/etc/kubernetes/pki/ca.crt # 客户端 CA 根证书
2. etcd 的 TLS 配置
etcd 存储集群所有敏感数据,必须通过 TLS 保护。
- 服务端证书:etcd 使用证书对外提供加密服务。
- 客户端证书:API Server 需提供有效证书才能访问 etcd。
# etcd 启动参数示例(/etc/kubernetes/manifests/etcd.yaml)
spec:containers:- command:- etcd- --cert-file=/etc/kubernetes/pki/etcd/server.crt # 服务端证书- --key-file=/etc/kubernetes/pki/etcd/server.key- --client-cert-auth=true # 要求客户端证书认证- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt # 客户端 CA 根证书
3. kubelet 的 TLS 配置
kubelet 是节点上的代理,需通过 TLS 与 API Server 通信。
- 服务端证书:kubelet 提供 HTTPS 端点供 API Server 访问(如日志、exec 功能)。
- 客户端证书:kubelet 使用证书向 API Server 认证自己。
# kubelet 配置示例(/var/lib/kubelet/config.yaml)
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
serverTLSBootstrap: true # 自动生成服务端证书
clientCAFile: /etc/kubernetes/pki/ca.crt
4. Ingress 的 TLS 配置
通过 Ingress 暴露的 HTTPS 服务需配置 TLS 证书。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: my-ingress
spec:tls:- hosts:- api.example.comsecretName: tls-secret # 引用存储证书的 Secretrules:- host: api.example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: gateway-serviceport:number: 80
4. 证书管理
Kubernetes 依赖证书颁发机构(CA)体系管理证书:
- 根证书(CA):集群信任的根证书(如
/etc/kubernetes/pki/ca.crt
)。 - 自动轮换:kubelet 支持自动轮换证书(通过
RotateKubeletServerCertificate
特性)。 - 工具支持:
kubeadm
:自动生成集群证书。cert-manager
:自动化管理 Ingress 证书(如 Let’s Encrypt)。
为什么必须使用 TLS?
- 默认安全要求:Kubernetes 设计时即要求所有生产环境通信必须加密。
- 合规性:满足 GDPR、HIPAA 等数据安全法规。
- 防御攻击:
- 防止集群内部流量被监听(如同一 VPC 内的其他服务)。
- 防止 API Server 被未授权访问(如公网暴露的集群)。
- 零信任架构:默认不信任任何组件,所有通信需验证身份。
总结
Kubernetes 使用 TLS 是构建安全集群的基石,涵盖加密、认证和完整性三大核心安全需求。无论是集群内部组件通信,还是对外暴露服务,TLS 都是防止数据泄露和未授权访问的关键防线。