首页 > 解决方案 > Kubernetes v1.10.11 和 v1.11.5 中生成的 x509 证书之间的差异

问题描述

我一直在创建一个安装了 kubernetes 的 amazon AMI,以用作 EKS 中的工作节点,我从 amazon-eks s3 存储桶安装了 kubelet 二进制文件。

从 k8s 版本 1.10.11 升级到 1.11.5 后,我注意到安装 kubelet 时生成的 x509 证书有所不同。

如果我跳到安装了 1.10.11 的工作节点之一并运行此命令openssl s_client -connect localhost:10250 2>/dev/null | openssl x509 -noout -text,我会得到以下输出X509v3 Subject Alternative Name

DNS:ip-<my-ip>.eu-central-1.compute.internal, DNS:ip-<my-ip>, IP Address:<my-ip>

然而,如果我在安装了 1.11.5 的工作节点上运行相同的命令,我会得到以下输出X509v3 Subject Alternative Name

DNS:ip-<my-ip>

两个节点之间唯一的变化是安装的 kubernetes 版本。

我是否遗漏了从 1.11.x 版本开始需要设置附加主题备用名称的任何内容,就像以前在 v1.10.x 中所做的那样?IP Address:<my-ip>我要求以我在 1.10 版中免费获得的格式在证书中设置 IP 地址。

仅供参考,我正在使用以下参数运行 kubelet:

ExecStart=/usr/bin/kubelet \
  --address=0.0.0.0 \
  --authentication-token-webhook \
  --authorization-mode=Webhook \
  --allow-privileged=true \
  --cloud-provider=aws \
  --cluster-dns=DNS_CLUSTER_IP \
  --cluster-domain=cluster.local \
  --cni-bin-dir=/opt/cni/bin \
  --cni-conf-dir=/etc/cni/net.d \
  --container-runtime=docker \
  --max-pods=MAX_PODS \
  --node-ip=INTERNAL_IP \
  --network-plugin=cni \
  --pod-infra-container-image=602401143452.dkr.ecr.REGION.amazonaws.com/eks/pause-amd64:3.1 \
  --cgroup-driver=cgroupfs \
  --register-node=true \
  --kubeconfig=/var/lib/kubelet/kubeconfig \
  --feature-gates=RotateKubeletServerCertificate=true \
  --anonymous-auth=false \
  --client-ca-file=CLIENT_CA_FILE \
  --node-labels=env=NODE_LABEL

标签: kubernetes

解决方案


1.10.11就处理证书而言,和之间没有 Kubernetes 特定的区别1.11.5。它可能与您正在使用的节点的特定EKS AMI相关(确保它们匹配)

如果不是,您可以使用与 Kubernetes 主服务器中的 CA 相同的 CA 手动为 kubelet创建证书。例如:

易莎

./easyrsa --subject-alt-name="IP:${MASTER_IP},"\
"IP:-<my-ip>,"\
"DNS:ip-<my-ip>.eu-central-1.compute.internal,"\
"DNS:ip-<my-ip>,"\
--days=10000 \
build-server-full server nopass

openssl

配置(csr.conf):

[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C = <country>
ST = <state>
L = <city>
O = <organization>
OU = <organization unit>
CN = <my-ip>

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = ip-<my-ip>.eu-central-1.compute.internal
DNS.2 = ip-<my-ip>
IP.1 = <my-ip>

[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names

创建企业社会责任:

$ openssl req -new -key server.key -out server.csr -config csr.conf

创建证书:

$ openssl x509 -req -in server.csr -CA cluster-ca.crt -CAkey cluster-ca.key \
-CAcreateserial -out server.crt -days 10000 \
-extensions v3_ext -extfile csr.conf

cfssl

以类似的方式,您可以使用此处描述的cfssl


推荐阅读