kubectl exec“错误:无法升级连接:未经授权”

时间:2019-05-14 09:08:31

标签: api docker kubernetes

我正在使用我们的kubernets集群,我不认为因此部署后我最近进行了更改,但是遇到此错误

详细的错误kubectl日志:

01:49:42.691510   30028 round_trippers.go:444] Response Headers:
I0514 01:49:42.691526   30028 round_trippers.go:447]     Content-Length: 12
10514 01:49:42.691537   30028 round_trippers.go:447]     Content-Type: text/plain; charset=utf-8
                                                            I0514 01:49:42.691545   30028 round_trippers.go:447]     Date: Tue, 14 May 2019 08:49:42 GMT
                                                                                                                                                        F0514 01:49:42.691976   30028 helpers.go:119] error: unable to upgrade connection: 
 Unauthorized


运行带有以下选项的小程序:

/usr/local/bin/kubelet --logtostderr=true --v=2 --address=0.0.0.0 --node-ip=1******
--hostname-override=***** --allow-privileged=true --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --authentication-token-webhook --enforce-node-allocatable= --client-ca-file=/etc/kubernetes/ssl/ca.crt --pod-manifest-path=/etc/kubernetes/manifests --pod-infra-container-image=gcr.io/google_containers/pause-amd64:3.1 --node-status-update-frequency=10s --cgroup-driver=cgroupfs --max-pods=110 --anonymous-auth=false --read-only-port=0 --fail-swap-on=True --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice --cluster-dns=10.233.0.3 --cluster-domain=cluster.local --resolv-conf=/etc/resolv.conf --kube-reserved cpu=200m,memory=512M --node-labels=node-role.kubernetes.io/master=,node-role.kubernetes.io/node= --network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin

使用以下选项运行的API:

kube-apiserver --allow-privileged=true --apiserver-count=2 --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --endpoint-reconciler-type=lease --insecure-port=0 --kubelet-preferred-address-types=InternalDNS,InternalIP,Hostname,ExternalDNS,ExternalIP --runtime-config=admissionregistration.k8s.io/v1alpha1 --service-node-port-range=30000-32767 --storage-backend=etcd3 --advertise-address=******* --client-ca-file=/etc/kubernetes/ssl/ca.crt --enable-admission-plugins=NodeRestriction --enable-bootstrap-token-auth=true --etcd-cafile=/etc/kubernetes/ssl/etcd/ca.pem --etcd-certfile=/etc/kubernetes/ssl/etcd/node-bg-kub-dev-1.pem --etcd-keyfile=/etc/kubernetes/ssl/etcd/node-bg-kub-dev-1-key.pem --etcd-servers=https://*******:2379,https://********:2379,https://*****:2379 --kubelet-client-certificate=/etc/kubernetes/ssl/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/ssl/apiserver-kubelet-client.key --proxy-client-cert-file=/etc/kubernetes/ssl/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/ssl/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/ssl/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-key-file=/etc/kubernetes/ssl/sa.pub --service-cluster-ip-range=10.233.0.0/18 --tls-cert-file=/etc/kubernetes/ssl/apiserver.crt --tls-private-key-file=/etc/kubernetes/ssl/apiserver.key

2 个答案:

答案 0 :(得分:0)

我已解决此问题。

实际上,两个主服务器中的“ /etc/kubernetes/ssl/ca.crt”是相同的,但在工作节点中,“ / etc / kubernetes / ssl / ca.crt”是完全不同的。因此,我只是将“ /etc/kubernetes/ssl/ca.crt”从主服务器复制到我的工作程序节点,然后在工作程序节点中重新启动kubelet,这解决了我的问题。 但是不确定我是否对修复进行了正确的更改

我希望--client-ca-file = / etc / kubernetes / ssl / ca.crt对于运行master和worker的所有kubelet都应该相同

答案 1 :(得分:0)

我认为您弄乱了证书文件或使用了RBAC配置文件。

您可以查看由Kelsey Hightower提供的名为kubernetes-the-hard-way的出色指南。

它显示了如何从一开始就设置整个集群,而无需像kubeadm这样的任何自动化工具。

04-certificate-authority - Provisioning a CA and Generating TLS Certificates部分中。 您已经在Kubernetes中使用了证书示例。

  

Kubelet客户证书

     

Kubernetes使用称为节点授权器的special-purpose authorization mode,它专门授权Kubelets发出的API请求。为了获得节点授权者的授权,Kubelet必须使用将其标识为system:nodes组中的凭据,并使用用户名system:node:<nodeName>。在本部分中,您将为每个满足Node Authorizer要求的Kubernetes工作者节点创建一个证书。

为工作人员生成并上传证书后,您需要为每个工作人员生成kubeconfig。

  

kubelet Kubernetes配置文件

     

为Kubelet生成kubeconfig文件时,必须使用与Kubelet的节点名称匹配的客户端证书。这将确保Kubernetes Node Authorizer已正确授权Kubelets。

这种情况也可能会有所帮助"kubectl exec" results in "error: unable to upgrade connection: Unauthorized"