Kubernetes Kubelet don';t使用TLS进行身份验证

Kubernetes Kubelet don';t使用TLS进行身份验证,kubernetes,Kubernetes,我已经使用Docker在Ubuntu虚拟机上部署了Kubernetes集群 没有TLS,它可以正常工作(在端口8080上) 我使用Let's Encrypt for secure API Server(端口6443),这很有效!当我的Kubelet希望使用https向主机进行身份验证时,我的问题出现了 以下是我启动Kubelet Api服务器的方式: /hyperkube apiserver --service-cluster-ip-range=10.0.0.1/24 --insec

我已经使用Docker在Ubuntu虚拟机上部署了Kubernetes集群

没有TLS,它可以正常工作(在端口8080上)

我使用Let's Encrypt for secure API Server(端口6443),这很有效!当我的Kubelet希望使用https向主机进行身份验证时,我的问题出现了

以下是我启动Kubelet Api服务器的方式:

    /hyperkube apiserver 
--service-cluster-ip-range=10.0.0.1/24 
--insecure-bind-address=127.0.0.1 
--etcd-servers=http://127.0.0.1:4001 
--admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota 
--client-ca-file=/srv/kubernetes/ca.crt 
--basic-auth-file=/srv/kubernetes/basic_auth.csv 
--min-request-timeout=300 
--tls-cert-file=/srv/kubernetes/server.cert 
--tls-private-key-file=/srv/kubernetes/server.key 
--token-auth-file=/srv/kubernetes/known_tokens.csv 
--allow-privileged=true --v=4
我就是这样推出Kubelet的:

  /hyperkube kubelet \
        --allow-privileged=true \
        --api-servers=https://k8:6443 \
        --kubeconfig=/srv/kubernetes/config.yaml \
        --v=2 \
        --address=0.0.0.0 \
        --enable-server \
        --containerized \
        --cluster-dns=10.0.0.10 \
        --cluster-domain=k8.local
以下是config.yaml文件:

apiVersion: v1
kind: Config
clusters:
- name: k8.local
  cluster:
    insecure-skip-tls-verify: true
    server: https://k8:6443
contexts:
- context:
    cluster: "k8.local"
    user: "node1"
  name: development
current-context: development
users:
- name: node1
  user:
    client-certificate: /var/run/kubernetes/kubelet.crt
    client-key: /var/run/kubernetes/kubelet.key
当我启动Kubelet时,日志显示:
服务器已要求客户端提供凭据

我想我对Kubelet的证书有错,但我不明白为什么

你能帮我吗

10xx.

您的客户证书(/var/run/kubernetes/kubelet.crt)是否由以下CA文件签名:--client CA file=/srv/kubernetes/CA.crt

另外,您可以尝试替换

- cluster:
    insecure-skip-tls-verify: true
    server: https://k8:6443
与:

我从未使用过基本身份验证或令牌身份验证,但有可能使用这些标志需要基于密码的身份验证。如果您正在进行纯粹基于证书的身份验证,我也会尝试删除这些

--basic-auth-file=/srv/kubernetes/basic_auth.csv 
--token-auth-file=/srv/kubernetes/known_tokens.csv
您的客户端证书(/var/run/kubernetes/kubelet.crt)是否由--client CA file=/srv/kubernetes/CA.crt中标识的CA文件签名

另外,您可以尝试替换

- cluster:
    insecure-skip-tls-verify: true
    server: https://k8:6443
与:

我从未使用过基本身份验证或令牌身份验证,但有可能使用这些标志需要基于密码的身份验证。如果您正在进行纯粹基于证书的身份验证,我也会尝试删除这些

--basic-auth-file=/srv/kubernetes/basic_auth.csv 
--token-auth-file=/srv/kubernetes/known_tokens.csv

感谢您的回答,/var/run/kubernetes中的证书默认在这里。我认为这就是问题所在,它们与我的Api服务器的证书没有链接。我只尝试了基本的auth,但它不起作用。如何生成由我的ca.pem文件签名的节点证书?我必须使用Let's Encrypt?我们一直在使用创建我们的证书。使用策略文件自动创建证书非常容易。事实上,当我创建新集群时,它们都会获得新证书,甚至CA证书。但是,对于Let's Encrypt,过程类似。您向他们提交CSR。当他们返回您的证书时,您应该有:1。您的签名证书2。CA证书链(或指向它的指针,可能在其网站上提供)。另外,使apiserver的--tls cert文件中的cert包含CA(cert然后是CA)。我使用本教程尝试了cfssl:我已经在Kubelet容器中拥有这些日志:
无法向apiserver:Post注册node1.k8https://k8:6443/api/v1/nodes: x509:由未知机构签署的证书
感谢您的回答,默认情况下,/var/run/kubernetes中的证书位于此处。我认为这就是问题所在,它们与我的Api服务器的证书没有链接。我只尝试了基本的auth,但它不起作用。如何生成由我的ca.pem文件签名的节点证书?我必须使用Let's Encrypt?我们一直在使用创建我们的证书。使用策略文件自动创建证书非常容易。事实上,当我创建新集群时,它们都会获得新证书,甚至CA证书。但是,对于Let's Encrypt,过程类似。您向他们提交CSR。当他们返回您的证书时,您应该有:1。您的签名证书2。CA证书链(或指向它的指针,可能在其网站上提供)。另外,使apiserver的--tls cert文件中的cert包含CA(cert然后是CA)。我使用本教程尝试了cfssl:我已经在Kubelet容器中拥有这些日志:
无法向apiserver:Post注册node1.k8https://k8:6443/api/v1/nodes: x509:由未知机构签署的证书