apiserver参数--kubelet-certificate-authority作用

官方说明:

 

 

参数作用:

 

文档链接:
https://kubernetes.io/zh-cn/docs/concepts/architecture/control-plane-node-communication/

 通过kubectl logs/exec等操作时,kubelet的https端口会作为建连的目标端。默认情况下apiserver时不会对kubelet服务端证书进行认证的,因此会存在中间人攻击风险

修复方案:

根据官方所说,kubeadm交付的集群,kubelet使用的是自签kubelet证书而非使用集群ca所签证书,因此需要在kubelet参数中指定如下两个参数,开启kubelet server证书认证,且证书由集群ca签署

[root@node kubelet-server-cert]# tail -2 /var/lib/kubelet/config.yaml
tlsCertFile: /var/lib/kubelet/pki/kubelet-server.crt
tlsPrivateKeyFile: /var/lib/kubelet/pki/kubelet-server.key
  1. kubelet基于集群ca签署server证书

    1. 创建目录

      [root@node ~]# mkdir kubelet-server-cert
      [root@node ~]# cd kubelet-server-cert/
      
    2. 创建kubelet-server.key用于后续生成csr文件

      [root@node kubelet-server-cert]# openssl genrsa -out kubelet-server.key 2048
      Generating RSA private key, 2048 bit long modulus
      .............+++
      .............+++
      e is 65537 (0x10001)
      
    3. 生成scr文件(Certificate Signing Request的英文缩写,即证书签名请求文件)

      [root@node kubelet-server-cert]# openssl req -new -sha256     -key kubelet-server.key     -subj "/CN=kubernetes"     -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf "\\n[SAN]\\nsubjectAltName=IP:192.168.10.110")) -out kubelet-server.csr
      
      # 这里openssl.cnf文件路径可以通过如下命令获取
      [root@node kubelet-server-cert]# openssl version -a
      OpenSSL 1.0.2k-fips  26 Jan 2017
      built on: reproducible build, date unspecified
      platform: linux-x86_64
      options:  bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
      compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
      OPENSSLDIR: "/etc/pki/tls"    # openssl配置文件路径
      engines:  rdrand dynamic 
      
    4. 创建extfile.txt文件证书配置,用于创建证书文件

      [root@node kubelet-server-cert]# cat extfile.txt
      subjectAltName = IP:192.168.10.110
      extendedKeyUsage = serverAuth
      [root@node kubelet-server-cert]# hostname -i
      192.168.10.110
      
    5. 使用集群CA生成节点kubelet服务端证书文件

      [root@node kubelet-server-cert]# openssl x509 -req -in kubelet-server.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out kubelet-server.crt -days 3650 -sha256 -extfile extfile.txt
      Signature ok
      subject=/CN=kubernetes
      Getting CA Private Key
      
    6. 将生成的kubelet-server.crt和kubelet-server.key文件添加至kubelet cert dir目录中

      # cert dir默认路径
      [root@node kubelet-server-cert]# kubelet --help |grep cert-dir
            --cert-dir string                                          The directory where the TLS certs are located. If --tls-cert-file and --tls-private-key-file are provided, this flag will be ignored. (default "/var/lib/kubelet/pki")
            
      [root@node kubelet-server-cert]# ls
      extfile.txt  kubelet-server.crt  kubelet-server.csr  kubelet-server.key
      [root@node kubelet-server-cert]# cp kubelet-server.crt kubelet-server.key /var/lib/kubelet/pki/
      
  2. kubelet配置文件中添加tls证书配置

    [root@node kubelet-server-cert]# tail -2 /var/lib/kubelet/config.yaml
    tlsCertFile: /var/lib/kubelet/pki/kubelet-server.crt
    tlsPrivateKeyFile: /var/lib/kubelet/pki/kubelet-server.key
    
  3. apiserver开启--kubelet-**certificate-autho**rity 参数,增加对kubelet服务端证书的认证

    [root@master kubelet-server-cert]# grep kubelet-certificat /etc/kubernetes/manifests/kube-apiserver.yaml
        - --kubelet-certificate-authority=/etc/kubernetes/pki/ca.crt
    
  4. 操作过程中发现,如果仅完成上述步骤,由于calico组件依然使用老token会无法获取集群信息,新pod会无法启动,因此需要重启所有calico组件

 posted on 2024-03-19 17:40  shelterCJJ  阅读(151)  评论(0)    收藏  举报