Kubernetes:如何启用 API Server Bearer Token Auth?

Kubernetes: how to enable API Server Bearer Token Auth?

我一直在尝试为 HTTP REST API 从远程客户端访问服务器启用令牌身份验证。

我使用此脚本安装了 CoreOS/K8S 集群控制器:https://github.com/coreos/coreos-kubernetes/blob/master/multi-node/generic/controller-install.sh

我的集群工作正常。这是 TLS 安装,因此我需要使用客户端证书配置任何 kubectl 客户端以访问集群。

然后我尝试通过 运行ning 启用令牌身份验证:

 echo `dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null`

这给了我一个令牌。然后我将令牌添加到控制器上的令牌文件中,其中包含一个令牌和默认用户:

$> cat /etc/kubernetes/token

3XQ8W6IAourkXOLH2yfpbGFXftbH0vn,default,default

然后我修改了 /etc/kubernetes/manifests/kube-apiserver.yaml 添加:

 - --token-auth-file=/etc/kubernetes/token

到启动参数列表

然后我重新启动(不确定单独重新启动 API 服务器的最佳方法??)

此时,来自远程服务器的 kubectl 停止工作(无法连接)。然后我查看控制器上的 docker ps 并查看 api 服务器。我 运行 docker logs container_id 没有输出。如果我查看其他 docker 个容器,我会看到如下输出:

    E0327 20:05:46.657679       1 reflector.go:188] 
    pkg/proxy/config/api.go:33: Failed to list *api.Endpoints: 
    Get http://127.0.0.1:8080/api/v1/endpoints?resourceVersion=0: 
dial tcp 127.0.0.1:8080: getsockopt: connection refused

看来我的 api-server.yaml 配置阻止 API 服务器正常启动....

关于正确配置API不记名令牌 REST 身份验证服务器的任何建议?

可以同时配置 TLS 和 Bearer Token Auth,对吗?

谢谢!

我认为您的 kube-apiserver 死机了,因为它找不到 /etc/kubernetes/token。那是因为在您的部署中,apiserver 是一个静态 pod,因此 运行 在容器中,这反过来意味着它具有与主机不同的根文件系统。

查看 /etc/kubernetes/manifests/kube-apiserver.yaml 并像这样添加 volumevolumeMount(我省略了不需要更改且无助于找到正确部分的行):

kind: Pod
metadata:
  name: kube-apiserver
spec:
  containers:
  - name: kube-apiserver
    command:
    - ...
    - --token-auth-file=/etc/kubernetes/token
    volumeMounts:
    - mountPath: /etc/kubernetes/token
      name: token-kubernetes
      readOnly: true
  volumes:
  - hostPath:
      path: /etc/kubernetes/token
    name: token-kubernetes

请注意:您引用为 token 的文件应该 而不是 . (点)结尾 - 也许那只是复制粘贴错误,但还是检查一下。格式记录在 static token file:

token,user,uid,"group1,group2,group3"

如果您的问题仍然存在,请执行以下命令并 post 输出:

journalctl -u kubelet | grep kube-apiserver