【发布时间】:2020-02-19 07:53:12
【问题描述】:
我从头开始设置了一个kubernetes 集群。这只是意味着我没有使用其他人提供的服务,而是使用了自己的k8s安装程序。以前我们有其他集群,但是有提供者,他们给你tls cert and key 用于身份验证等。现在这个集群是我自己设置的,我可以通过kubectl 访问:
$ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
$
我也尝试了this,我可以添加一个自定义键,但是当我尝试通过 curl 查询时,我得到了pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" at the cluster scope。
我不知道在哪里可以获得证书和密钥,以便用户使用 tls auth 的 API 进行身份验证。我试图了解官方文档,但我一无所获。有人可以帮我找到这些文件在哪里,或者如何添加或获取可用于其余 API 的证书吗?
Edit1:我的 .kube.config 文件如下所示:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: LS0t(...)=
server: https://private_IP:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: LS0tLS(...)Qo=
client-key-data: LS0(...)tCg==
它在本地主机上正常工作。 另一方面,我注意到了一些事情。从 localhost 我可以通过使用this 方法生成令牌来访问集群。
另外请注意,现在我不介意为多个用户创建多个角色等。我只需要从远程访问 API 并且可以使用“默认”身份验证或角色。 现在,当我尝试从远程执行相同操作时,我得到以下信息:
- 我尝试使用该配置从远程运行
kubectl get all,它运行了一段时间,然后以Unable to connect to the server: dial tcpprivate_IP:6443: i/o timeout.结束 - 发生这种情况是因为配置有
private_IP,然后我将IP 更改为Public_IP:6443,现在得到以下内容:Unable to connect to the server: x509: certificate is valid for some_private_IP, My_private_IP, not Public_IP:6443 - 保持现状,这是和
AWS ec2实例与elastic IP(您可以将弹性 IP 视为传统设置中的公共 IP,但此公共 IP 在您的公共路由器上,然后此路由器将请求路由到您在专用网络上的实际服务器)。对于我所说的 AWS 粉丝,我不能在这里使用 EKS 服务。
那么我怎样才能让它能够使用公共 IP?
【问题讨论】:
-
您有自动生成的
~/.kube/config文件吗?如果可以,可以发一下吗? -
@weibeld,我添加了一些上下文。
标签: authentication ssl curl kubernetes tls1.2