# 当你没有设置 kubeconfig 而直接调用 kubectl 时 $ kubectl get ns -v=9 # 可以打印出下面类似的错误 $ curl -k -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.21.3 (linux/amd64) kubernetes/ca643a4" 'http://localhost:8080/api?timeout=32s' skipped caching discovery info due to Get "http://localhost:8080/api?timeout=32s": dial tcp 127.0.0.1:8080: connect: connection refused # 也就是说当你不指定kubeconfig文件时, kubectl会默认访问本机的8080端口 # 那么我们先启动一个kubectl proxy, 然后指定监听8080, 再使用kubectl直接访问, 是不是就可行了呢, # 事实证明, 安全与预想一致. $ KUBECONFIG=~/.kube/config-symv3 kubectl proxy -p 8080 $ kubectl get ns NAME STATUS AGE default Active 127d
默认启动的 Proxy 是屏蔽了某些 API 的, 并且有一些限制, 例如无法使用 exec 进入 pod 之中 可以使用 kubectl proxy --help 来看, 例如
1 2 3 4 5 6 7
# 仅允许本机访问 --accept-hosts='^localhost$,^127\.0\.0\.1$,^\[::1\]$': Regular expression for hosts that the proxy should accept. # 不允许访问下面的api, 也就是说默认没法exec进入容器 --reject-paths='^/api/.*/pods/.*/exec,^/api/.*/pods/.*/attach': Regular expression for paths that the proxy should reject. Paths specified here will be rejected even accepted by --accept-paths.