由未知授权机构签名的x509证书-Kubernetes

Nak*_*tra 7 docker coreos kubernetes

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

但是我得到了:x509:在工作程序中运行kubelet时,由未知权限签名的证书(可能是由于“ crypto / rsa:验证错误”,而试图验证候选授权证书“ kube-ca”)

我按照文档中的说明在两台服务器上都正确配置了TLS证书。

主节点工作正常。而且,kubectl能够在主容器中射击容器和吊舱。

问题1:何解决这个问题?

问题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"
Run Code Online (Sandbox Code Playgroud)

Etcd conf:

 $ etcdctl member list          
ce2a822cea30bfca: name=78c2c701d4364a8197d3f6ecd04a1d8f peerURLs=http://localhost:2380,http://localhost:7001 clientURLs=http://172.24.0.67:2379
Run Code Online (Sandbox Code Playgroud)

主人: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
Run Code Online (Sandbox Code Playgroud)

大师: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
Run Code Online (Sandbox Code Playgroud)

主人: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
Run Code Online (Sandbox Code Playgroud)

主人: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
Run Code Online (Sandbox Code Playgroud)

硕士: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
Run Code Online (Sandbox Code Playgroud)

从站: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
Run Code Online (Sandbox Code Playgroud)

从站: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"
Run Code Online (Sandbox Code Playgroud)

yas*_*ini 26

mkdir -p $HOME/.kube   
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config   
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Run Code Online (Sandbox Code Playgroud)

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

Uma*_*yat 10

来自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
    
    Run Code Online (Sandbox Code Playgroud)

参考: 官网链接参考


Abh*_*edi 1

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

\n

首先,运行此链接中给出的命令:kubernetes.io/docs/setup/independent/create-cluster-kubeadm\xe2\x80\x8c\xe2\x80\x8b/\xe2\x80\xa6

\n

完成这些命令:

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

kubectl 应该知道这个 admin.conf 才能正常工作。

\n