【问题标题】:x509 certificate signed by unknown authority- Kubernetes未知权威签署的 x509 证书 - Kubernetes
【发布时间】:2016-08-24 16:14:11
【问题描述】:

https://coreos.com/kubernetes/docs/latest/getting-started.html 中所述,我正在CoreOS 中配置一个具有2 个节点的Kubernetes 集群,没有flannel。 两台服务器在同一个网络中。

但我得到: x509:在 worker 中运行 kubelet 时,证书由未知权威机构签署(可能是因为尝试验证候选权威机构证书“kube-ca”时出现“crypto/rsa:验证错误”)

如文档中所述,我在两台服务器上都正确配置了 TLS 证书。

主节点工作正常。 kubectl 能够在 master 中触发容器和 Pod。

问题一:如何解决这个问题?

问题 2:有没有办法在没有 TLS 证书的情况下配置集群?

Coreos version:
VERSION=899.15.0
VERSION_ID=899.15.0
BUILD_ID=2016-04-05-1035
PRETTY_NAME="CoreOS 899.15.0"

Etcd 配置:

 $ etcdctl member list          
ce2a822cea30bfca: name=78c2c701d4364a8197d3f6ecd04a1d8f peerURLs=http://localhost:2380,http://localhost:7001 clientURLs=http://172.24.0.67:2379

Master:kubelet.service:

[Service]
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests
Environment=KUBELET_VERSION=v1.2.2_coreos.0
ExecStart=/opt/bin/kubelet-wrapper \
  --api-servers=http://127.0.0.1:8080 \
  --register-schedulable=false \
  --allow-privileged=true \
  --config=/etc/kubernetes/manifests \
  --hostname-override=172.24.0.67 \
  --cluster-dns=10.3.0.10 \
  --cluster-domain=cluster.local
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

Master:kube-controller.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kube-controller-manager
  namespace: kube-system
spec:
  hostNetwork: true
  containers:
  - name: kube-controller-manager
    image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
    command:
    - /hyperkube
    - controller-manager
    - --master=http://127.0.0.1:8080
    - --leader-elect=true 
    - --service-account-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
    - --root-ca-file=/etc/kubernetes/ssl/ca.pem
    livenessProbe:
      httpGet:
        host: 127.0.0.1
        path: /healthz
        port: 10252
      initialDelaySeconds: 15
      timeoutSeconds: 1
    volumeMounts:
    - mountPath: /etc/kubernetes/ssl
      name: ssl-certs-kubernetes
      readOnly: true
    - mountPath: /etc/ssl/certs
      name: ssl-certs-host
      readOnly: true
  volumes:
  - hostPath:
      path: /etc/kubernetes/ssl
    name: ssl-certs-kubernetes
  - hostPath:
      path: /usr/share/ca-certificates
    name: ssl-certs-host

主人:kube-proxy.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kube-proxy
  namespace: kube-system
spec:
  hostNetwork: true
  containers:
  - name: kube-proxy
    image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
    command:
    - /hyperkube
    - proxy
    - --master=http://127.0.0.1:8080
    securityContext:
      privileged: true
    volumeMounts:
    - mountPath: /etc/ssl/certs
      name: ssl-certs-host
      readOnly: true
  volumes:
  - hostPath:
      path: /usr/share/ca-certificates
    name: ssl-certs-host

Master:kube-apiserver.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  hostNetwork: true
  containers:
  - name: kube-apiserver
    image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
    command:
    - /hyperkube
    - apiserver
    - --bind-address=0.0.0.0
    - --etcd-servers=http://172.24.0.67:2379
    - --allow-privileged=true
    - --service-cluster-ip-range=10.3.0.0/24
    - --secure-port=443
    - --advertise-address=172.24.0.67
    - --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
    - --tls-cert-file=/etc/kubernetes/ssl/apiserver.pem
    - --tls-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
    - --client-ca-file=/etc/kubernetes/ssl/ca.pem
    - --service-account-key-file=/etc/kubernetes/ssl/apiserver-key.pem
    ports:
    - containerPort: 443
      hostPort: 443
      name: https
    - containerPort: 8080
      hostPort: 8080
      name: local
    volumeMounts:
    - mountPath: /etc/kubernetes/ssl
      name: ssl-certs-kubernetes
      readOnly: true
    - mountPath: /etc/ssl/certs
      name: ssl-certs-host
      readOnly: true
  volumes:
  - hostPath:
      path: /etc/kubernetes/ssl
    name: ssl-certs-kubernetes
  - hostPath:
      path: /usr/share/ca-certificates
    name: ssl-certs-host

Master:kube-scheduler.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kube-scheduler
  namespace: kube-system
spec:
  hostNetwork: true
  containers:
  - name: kube-scheduler
    image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
    command:
    - /hyperkube
    - scheduler
    - --master=http://127.0.0.1:8080
    - --leader-elect=true
    livenessProbe:
      httpGet:
        host: 127.0.0.1
        path: /healthz
        port: 10251
      initialDelaySeconds: 15
      timeoutSeconds: 1

从站:kubelet.service

[Service]
ExecStartPre=/usr/bin/mkdir -p /etc/kubernetes/manifests

Environment=KUBELET_VERSION=v1.2.2_coreos.0 
ExecStart=/opt/bin/kubelet-wrapper \
  --api-servers=https://172.24.0.67:443 \
  --register-node=true \
  --allow-privileged=true \
  --config=/etc/kubernetes/manifests \
  --hostname-override=172.24.0.63 \
  --cluster-dns=10.3.0.10 \
  --cluster-domain=cluster.local \
  --kubeconfig=/etc/kubernetes/worker-kubeconfig.yaml \
  --tls-cert-file=/etc/kubernetes/ssl/worker.pem \
  --tls-private-key-file=/etc/kubernetes/ssl/worker-key.pem
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

从站:kube-proxy.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kube-proxy
  namespace: kube-system
spec:
  hostNetwork: true
  containers:
  - name: kube-proxy
    image: quay.io/coreos/hyperkube:v1.2.2_coreos.0
    command:
    - /hyperkube
    - proxy
    - --master=https://172.24.0.67:443
    - --kubeconfig=/etc/kubernetes/worker-kubeconfig.yaml
    - --proxy-mode=iptables
    securityContext:
      privileged: true
    volumeMounts:
      - mountPath: /etc/ssl/certs
        name: "ssl-certs"
      - mountPath: /etc/kubernetes/worker-kubeconfig.yaml
        name: "kubeconfig"
        readOnly: true
      - mountPath: /etc/kubernetes/ssl
        name: "etc-kube-ssl"
        readOnly: true
  volumes:
    - name: "ssl-certs"
      hostPath:
        path: "/usr/share/ca-certificates"
    - name: "kubeconfig"
      hostPath:
        path: "/etc/kubernetes/worker-kubeconfig.yaml"
    - name: "etc-kube-ssl"
      hostPath:
        path: "/etc/kubernetes/ssl"

【问题讨论】:

  • 会试试这个,然后回复你。谢谢
  • 您是如何生成证书的?通常,您需要编辑证书的 SAN(主题 alt 名称),并添加主服务器的 IP 或主机名,在您的情况下为:172.24.0.67
  • 有这方面的消息吗?
  • 我遇到了类似的错误,但是在使用 kubeadm 安装 kubernetes 期间。我不得不删除以前的“/etc/cni/net.d”并取消设置我的代理。

标签: docker kubernetes coreos


【解决方案1】:
mkdir -p $HOME/.kube   
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config   
sudo chown $(id -u):$(id -g) $HOME/.kube/config

【讨论】:

  • 欢迎来到 SO!请添加一些详细信息来解释您的答案的作用,这将对 OP 和该帖子的未来读者更有帮助。
  • 我确认此解决方案有效。我通过 kubeadm init 创建了集群,之后我通过 kubeadm 删除了集群,然后我通过 kubeadm init 重新创建了集群。但我没有从 $HOME 中删除旧配置。我得到了上述错误。因此,我尝试将 newcluster 与旧 k8s 证书中的旧配置文件一起使用。这就是为什么它没有工作。在我将配置从 /etc 替换为 $HOME 之后,现在一切都很好。所以在我看来,如果您收到 x509 错误,这意味着您正在尝试使用旧集群中的 $HOME 中的旧配置。
  • 我确认这个解决方案也适用于我,即使像我这样的初学者会非常欢迎一些解释。
  • 这应该被接受为答案,它也对我有用
  • 这是 kubeadm 在 kubeadm init 之后所说的。您的 Kubernetes 控制平面已成功初始化!要开始使用您的集群,您需要以普通用户身份运行以下命令: mkdir -p $HOME/.kube....cp -i....
【解决方案2】:

来自kubernetes官网:

  1. 验证 $HOME/.kube/config 文件是否包含有效证书,并重新生成证书

  2. 使用以下方法取消设置 KUBECONFIG 环境变量:

    unset KUBECONFIG

    或者将其设置为默认的 KUBECONFIG 位置:

    export KUBECONFIG=/etc/kubernetes/admin.conf

  3. 另一种解决方法是覆盖“admin”用户的现有 kubeconfig:

    mv  $HOME/.kube $HOME/.kube.bak
    mkdir $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

参考:official site link reference

【讨论】:

    【解决方案3】:

    请将此作为参考,并可能通过导出您的证书来帮助您解决问题:

    kops export kubecfg "your cluster-name"
    export KOPS_STATE_STORE=s3://"paste your S3 store"
    

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      上述常规方法不起作用。我尝试使用完整的命令来获得成功的证书。请看以下命令。

      $ sudo kubeadm reset
      $ sudo swapoff -a 
      
      $ sudo kubeadm init --pod-network-cidr=10.244.10.0/16 --kubernetes- 
        version "1.18.3"
      $ sudo rm -rf $HOME/.kube
      
      $ mkdir -p $HOME/.kube
      $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
      $ sudo systemctl enable docker.service
      $ sudo service kubelet restart
      
      $ kubectl get nodes
      

      注意事项:

      如果端口拒绝连接,请添加以下命令。

      $ export KUBECONFIG=$HOME/admin.conf
      

      【讨论】:

      • 这对我有用,我想我也需要重新启动 kubelet 服务
      【解决方案5】:

      嗯,要回答你的第一个问题,我认为你必须做一些事情来解决你的问题。

      首先,运行此链接中给出的命令:kubernetes.io/docs/setup/independent/create-cluster-kubeadm‌​/…

      完成这些命令:

      • mkdir -p $HOME/.kube
      • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      • sudo chown $(id -u):$(id -g) $HOME/.kube/config

      kubectl 应该知道这个 admin.conf 以便正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-13
        • 2019-04-12
        • 2018-04-22
        • 1970-01-01
        • 2021-11-04
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多