Kubernetes 简单认证

Kubernetes simple authentication

我在托管在 DigitalOcean 上的 coreOS 集群上使用 Kubernetes。 并使用 this repo 进行设置。我使用以下行启动了 apiserver:

    /opt/bin/kube-apiserver --runtime-config=api/v1 --allow-privileged=true \ 
     --insecure-bind-address=0.0.0.0 --insecure-port=8080 \
     --secure-port=6443 --etcd-servers=http://127.0.0.1:2379 \
     --logtostderr=true --advertise-address=${COREOS_PRIVATE_IPV4} \
     --service-cluster-ip-range=10.100.0.0/16 --bind-address=0.0.0.0

问题是它接受任何人的请求!我希望能够提供简单的 user/password 身份验证。我一直在阅读 this and this 并且似乎我必须做类似下面的事情,但是我不能承受长时间关闭集群,所以我需要你们的帮助。顺便说一句,我的 pods 不会创建另一个 pods,所以我只需要几个用户,例如 1/2 用于开发人员和 1 用于 CI。

我正在考虑做一些事情,比如在需要时包含授权模式和授权策略文件标志,并使不安全绑定地址 localhost 仅在本地可用。我错过了什么?

    /opt/bin/kube-apiserver --runtime-config=api/v1 --allow-privileged=true \ 
     --authorization-mode=ABAC --authorization-policy-file=/access.json \
     --insecure-bind-address=127.0.0.1 --insecure-port=8080 \
     --secure-port=6443 --etcd-servers=http://127.0.0.1:2379 \
     --logtostderr=true --advertise-address=${COREOS_PRIVATE_IPV4} \
     --service-cluster-ip-range=10.100.0.0/16 --bind-address=0.0.0.0

###/access.json

{"user":"admin"}
{"user":"wercker"}
{"user":"dev1"}
{"user":"dev2"}

但是密码在哪里?我实际上如何使用 kubectl 和 curl 或 httpie 发出请求?

如果您希望您的用户使用 HTTP Basic Auth(用户:密码)进行身份验证,您可以添加:

--basic-auth-file=/basic_auth.csv

到你的 kube-apiserver 命令行,文件的每一行都应该是 password, user-name, user-id。例如:

@dm1nP@ss,admin,admin
w3rck3rP@ss,wercker,wercker
etc...

如果您更愿意使用访问令牌(HTTP 身份验证:Bearer),您可以指定:

--token-auth-file=/known-tokens.csv

每行应 token,user-name,user-id[,optional groups]。例如:

@dm1nT0k3n,admin,admin,adminGroup,devGroup
w3rck3rT0k3n,wercker,wercker,devGroup
etc...

有关详细信息,请查看 Authentication docs. Also checkout example_policy_file.jsonl 示例 ABAC 文件。