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

phi*_*son 6 coreos kubernetes

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

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

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

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

 echo `dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64 | tr -d "=+/" | dd bs=32 count=1 2>/dev/null`
Run Code Online (Sandbox Code Playgroud)

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

$> cat /etc/kubernetes/token

3XQ8W6IAourkXOLH2yfpbGFXftbH0vn,default,default
Run Code Online (Sandbox Code Playgroud)

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

 - --token-auth-file=/etc/kubernetes/token
Run Code Online (Sandbox Code Playgroud)

到启动参数列表

然后我重新启动(不确定自己重新启动 API Server 的最佳方法??)

此时,来自远程服务器的 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

Jan*_*art 6

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

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

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

还要说明一点:你引述的文件token应该没有结束.(点) -也许这只是一个复制粘贴错误,但无论如何检查。该格式记录在静态令牌文件下

令牌,用户,用户名,“group1,group2,group3”

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

journalctl -u kubelet | grep kube-apiserver
Run Code Online (Sandbox Code Playgroud)