使用kubeadm安装Kubernetes(k8s)集群时,如何配置集群证书和安全设置?

问题浏览数Icon
66
问题创建时间Icon
2025-04-03 01:35:00
回答 | 共 5 个
作者头像
chaofeng9

在配置kubeadm集群证书及安全设置时,需关注以下核心要点:

  1. 证书管理:通过kubeadm init时指定--cert-dir自定义证书路径,修改ClusterConfigurationcertificatesDir字段;建议替换默认1年有效期为--certificate-renewable=true并定期执行kubeadm certs renew。企业级环境应替换CA为私有根证书,通过--upload-certs配合加密传输。
  2. API安全加固:在apiServer配置段强制关闭匿名访问(anonymous-auth: false),启用Node限制准入控制器(enable-admission-plugins: NodeRestriction),配置serviceAccount颁发者(service-account-issuer)及JWT密钥轮换策略。
  3. ETCD加密:在etcd配置中增加encryption-provider-config指向AES/CBC或KMS加密描述文件,确保secret数据落盘加密。
  4. RBAC最小权限:初始化后立即删除system:public-info-viewer等宽松ClusterRole,严格绑定ServiceAccount权限。
  5. 配置示例片段
    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    certificatesDir: /etc/kubernetes/pki
    apiServer:
    extraArgs:
    anonymous-auth: "false"
    service-account-issuer: https://kubernetes.default.svc
    service-account-jwks-uri: https://kubernetes.default.svc/openid/v1/jwks
    extraVolumes:
    - name: etc-kube-apiserver
    hostPath: /etc/kubernetes/pki
    mountPath: /etc/kubernetes/pki

    实践建议:结合企业PKI体系预置CA可大幅降低运维复杂度,同时需建立证书过期监控机制,避免集群不可用。生产环境应通过HashiCorp Vault等工具实现证书自动化生命周期管理。

作者头像
cocostar888
  1. 生成自定义CA证书
    • 创建CA私钥和证书:
      openssl genrsa -out ca.key 2048
      openssl req -x509 -new -nodes -key ca.key -subj "/CN=kubernetes" -days 3650 -out ca.crt
  2. 配置kubeadm.yaml
    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    certificatesDir: /etc/kubernetes/pki
    clusterName: my-cluster
    controlPlaneEndpoint: "IP:6443"
    apiServer:
     certSANs:
       - "IP"
       - "DNS名称"
    etcd:
     external:
       keyFile: /path/to/etcd-client.key
       certFile: /path/to/etcd-client.crt
  3. 安全加固
    • 修改API Server manifest(/etc/kubernetes/manifests/kube-apiserver.yaml):
      - --anonymous-auth=false
      - --client-ca-file=/etc/kubernetes/pki/ca.crt
      - --enable-admission-plugins=NodeRestriction
    • 启用RBAC并创建最小权限ServiceAccount
  4. 证书管理
    • 手动替换pki目录证书或使用 kubeadm init phase certs all --config kubeadm.yaml
    • 定期更新:kubeadm certs renew all
  5. 网络策略
    • 安装Calico/Cilium时启用NetworkPolicy:
      kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml
  6. 审计日志
    • 在apiServer配置中添加:
      - --audit-log-path=/var/log/apiserver/audit.log
      - --audit-policy-file=/etc/kubernetes/audit-policy.yaml
作者头像
donglin22
  1. 证书配置

    • 自定义证书路径:在kubeadm-config.yaml中设置certificatesDir指定证书存储目录。
    • 证书扩展SAN:在apiServer配置段添加certSANs,包含所有Master节点IP、负载均衡IP及DNS名称。
    • 手动签发证书(可选):
    • 使用openssl生成自定义CA和证书。
    • 替换/etc/kubernetes/pki目录下默认证书文件,保留ca.keyca.crt以兼容自动续期。
    • 证书续期调整:通过kubeadm init phase certs预生成证书时,添加--config参数指定配置文件延长有效期。
  2. 安全加固

    • 禁用匿名访问:在kube-apiserver启动参数添加--anonymous-auth=false
    • 启用RBAC:确保kubeadm-config.yamlapiServer.extraArgs包含--authorization-mode=RBAC
    • 加密ETCD数据
    • 创建encryption-config.yaml,配置aescbckms加密Provider。
    • kube-apiserver中通过--encryption-provider-config加载配置。
    • Pod安全策略
    • 部署前在kubeadm-config.yamlapiServer.extraArgs启用PodSecurity准入控制器。
    • 创建命名空间级PSA策略(如restricted)。
    • Kubelet认证强化
    • kubeadm-config.yamlnodeRegistration段配置kubeletExtraArgs,添加--anonymous-auth=false --client-ca-file=/etc/kubernetes/pki/ca.crt
    • 通过kubeadm init --config应用配置。
  3. 验证与后续

    • 执行kubeadm init --config=kubeadm-config.yaml初始化集群。
    • 部署完成后检查:
    • kubectl get --raw=/metrics确认匿名访问已禁用。
    • kubectl describe pod -n kube-system验证Secret加密状态。
    • 使用kubeadm certs check-expiration确认证书有效期。
    • 定期维护:配置cronjob或外部工具监控证书过期时间,提前触发kubeadm certs renew
作者头像
baifeng99

使用kubeadm安装Kubernetes时,可通过修改kubeadm-config.yaml配置集群证书(如设置自定义CA或调整证书有效期)和启用安全机制(如--enable-admission-plugins=PodSecurityPolicy)。

延伸知识点:证书自动轮换机制 Kubernetes 1.8+支持自动轮换kubelet证书。需在kubelet配置中添加--rotate-certificates参数并设置--cert-dir存储路径。当证书到期前30天,kubelet会自动向API Server申请新证书,API Server验证旧证书合法性后签发新证书,旧证书加入CertificateSigningRequest对象的status.certificate字段。此过程无需停机,但需确保集群时间同步且控制平面证书由同一CA签发。

作者头像
xiaozhu66

使用kubeadm部署Kubernetes集群时,证书与安全配置需遵循以下核心原则:

  1. 证书管理

    • 默认使用kubeadm生成自签名CA证书,但建议替换为企业内部CA签发的证书以增强信任链。通过修改ClusterConfigurationcertificatesDir路径,并预置自定义CA文件(如ca.crtca.key)。
    • 通过apiserver-cert-extra-sans添加API Server的SAN扩展(如负载均衡IP/DNS),避免证书验证错误。
  2. 安全加固

    • 启用RBAC并限制cluster-admin权限,使用最小权限原则分配ServiceAccount。
    • 配置kube-apiserver--enable-admission-plugins参数,启用NodeRestrictionPodSecurityPolicy(或替代方案如Gatekeeper)等插件。
    • 加密etcd存储(通过--encryption-provider-config配置AES或KMS加密),确保静态数据安全。
  3. 网络策略

    • 部署CNI插件(如Calico/Cilium)并启用NetworkPolicy,隔离Pod间通信。
    • 配置API Server的--authorization-mode=Node,RBAC--anonymous-auth=false,禁用匿名访问。
  4. 证书轮换

    • 使用kubeadm alpha certs renew或配置ClusterConfiguration中的certificatesExpiration字段(v1.19+)实现自动轮换。
  5. 审计与监控

    • 启用API Server审计日志(--audit-log-path),记录关键操作。
    • 集成Prometheus与Grafana监控集群证书过期时间及异常行为。

完整方案需结合kubeadm-config.yaml自定义参数,并在初始化后通过kubectl apply -f部署网络策略及安全上下文约束(如Pod Security Standards)。