kubectl exec 遇到 unable to upgrade connection Forbidden 的解决办法

为确保安全,`kubernetes` 系统各组件需要使用 `x509` 证书对通信进行加密和认证。

当我执行 kubectl exec 命令来登陆到 Pod 里面进行操作。遇到以下问题:

[root@k97 work]# kubectl get pods -o wide
NAME                        READY   STATUS    RESTARTS   AGE    IP             NODE   NOMINATED NODE   READINESS GATES
dnsutils-ds-bd9pz           1/1     Running   0          26s    172.16.176.4   k99    <none>           <none>
dnsutils-ds-p4d2x           1/1     Running   0          26s    172.16.120.4   k97    <none>           <none>
dnsutils-ds-pfhzs           1/1     Running   0          26s    172.16.232.4   k98    <none>           <none>
my-nginx-86575b68dc-8s44j   1/1     Running   0          8m4s   172.16.176.3   k99    <none>           <none>
my-nginx-86575b68dc-q89h4   1/1     Running   0          8m4s   172.16.120.3   k97    <none>           <none>
nginx-ds-jgnqw              1/1     Running   0          18h    172.16.176.2   k99    <none>           <none>
nginx-ds-ks4cf              1/1     Running   0          18h    172.16.232.2   k98    <none>           <none>
nginx-ds-z6d2h              1/1     Running   0          18h    172.16.120.2   k97    <none>           <none>

[root@k97 work]# kubectl -it exec dnsutils-ds-p4d2x  cat /etc/resolv.conf
error: unable to upgrade connection: Forbidden (user=kubernetes-master, verb=create, resource=nodes, subresource=proxy)
[root@k97 work]# 

分析解决问题:

在执行 kubectl exec、run、logs 等命令时,apiserver 会将请求转发到 kubelet 的 https 端口,并且我使用的 Kubernetes 集群启用了 RBAC。

这里定义 RBAC 规则,授权 apiserver 使用的证书(kubernetes.pem)用户名(CN:kuberntes-master)访问 kubelet API 的权限:

[root@k97 work]# kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user kubernetes-master
clusterrolebinding.rbac.authorization.k8s.io/kube-apiserver:kubelet-apis created

授予 kube-apiserver 访问 kubelet API 的权限

完成后再执行:


[root@k97 work]# kubectl -it exec dnsutils-ds-p4d2x  cat /etc/resolv.conf
nameserver 10.254.0.2
search default.svc.cluster.local svc.cluster.local cluster.local mayocase.com
options ndots:5
[root@k97 work]# 

网上找到的另一个办法(不推荐):

解决办法2:
为 system:anonymous 临时绑定一个 cluster-admin 的权限

kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous

这个权限放太松了,很危险。 可以只对 anonymous 用户绑定必要权限即可,修改为:

kubectl create clusterrolebinding kube-apiserver:kubelet-apis --clusterrole=system:kubelet-api-admin --user=system:anonymous

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值