针对 API 服务器的 kubernetes 身份验证
kubernetes authentication against the API server
我已经从头开始设置了一个 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
.
我不知道从哪里可以获得证书和密钥,以便用户使用 API 进行 tls 身份验证进行身份验证。我试图了解官方文档,但我一无所获。谁能帮我找到这些文件在哪里,或者如何添加或获取我可以用于其余文件的证书 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==
它在本地主机上正常工作。
另一方面,我注意到了一些事情。从本地主机,我可以通过使用 this 方法生成令牌来访问集群。
另请注意,目前我不介意为多个用户创建多个角色等。我只需要从远程访问 API 并且可以使用 "default" 身份验证或角色。
现在,当我尝试从远程执行相同操作时,我得到以下信息:
- 我尝试使用该配置从远程 运行
kubectl get all
,运行 持续了一段时间,然后以 Unable to connect to the server: dial tcp
private_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 视为传统设置中的 public IP,但此 public ip 在你的 public 路由器上,然后这个路由器将请求路由到你在专用网络上的实际服务器)。对于像我说的 AWS 粉丝,我不能在这里使用 EKS 服务。
那么如何才能使用 Public IP?
您需要为用户设置 RBAC。定义角色和角色绑定。按照link参考 -> https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/
您的主要问题似乎是 TLS 服务器证书验证。
一个选项是告诉 kubectl 跳过服务器证书的验证:
kubectl --insecure-skip-tls-verify ...
这显然有可能成为 "insecure",但这取决于您的用例
另一种选择是使用添加到服务器证书的 public IP 地址重新创建集群。并且还应该可以只用 kubeadm
重新创建证书而不重新创建集群。关于后两点的详细信息可以在.
中找到
我已经从头开始设置了一个 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
.
我不知道从哪里可以获得证书和密钥,以便用户使用 API 进行 tls 身份验证进行身份验证。我试图了解官方文档,但我一无所获。谁能帮我找到这些文件在哪里,或者如何添加或获取我可以用于其余文件的证书 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==
它在本地主机上正常工作。 另一方面,我注意到了一些事情。从本地主机,我可以通过使用 this 方法生成令牌来访问集群。
另请注意,目前我不介意为多个用户创建多个角色等。我只需要从远程访问 API 并且可以使用 "default" 身份验证或角色。 现在,当我尝试从远程执行相同操作时,我得到以下信息:
- 我尝试使用该配置从远程 运行
kubectl get all
,运行 持续了一段时间,然后以Unable to connect to the server: dial tcp
private_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 视为传统设置中的 public IP,但此 public ip 在你的 public 路由器上,然后这个路由器将请求路由到你在专用网络上的实际服务器)。对于像我说的 AWS 粉丝,我不能在这里使用 EKS 服务。
那么如何才能使用 Public IP?
您需要为用户设置 RBAC。定义角色和角色绑定。按照link参考 -> https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/
您的主要问题似乎是 TLS 服务器证书验证。
一个选项是告诉 kubectl 跳过服务器证书的验证:
kubectl --insecure-skip-tls-verify ...
这显然有可能成为 "insecure",但这取决于您的用例
另一种选择是使用添加到服务器证书的 public IP 地址重新创建集群。并且还应该可以只用 kubeadm
重新创建证书而不重新创建集群。关于后两点的详细信息可以在