15

我只是基于此链接https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#multi-platform设置了一个 kubenetes 集群 我检查了 kubectl get 节点,然后主节点准备就绪,但是当我访问链接https://k8s-master-ip:6443/ 它显示错误:用户“system:anonymous”无法获取路径“/”。我缺少什么技巧?

4

2 回答 2

12

希望你看到这样的东西:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
  "reason": "Forbidden",
  "details": {
    
  },
  "code": 403
}

这很好,因为不是每个人都应该能够访问集群,如果你想看到服务运行"kubectl proxy",这应该允许从外部访问服务。

C:\dev1> kubectl proxy
Starting to serve on 127.0.0.1:8001

当您点击时,127.0.0.1:8001您应该会看到服务列表。

于 2021-04-22T05:21:31.030 回答
11

最新的 kubernetes 部署工具在集群上启用了 RBAC。Jenkinssystem:anonymous在访问https://192.168.70.94:6443/api/v1/.... 该用户对 kube-apiserver 几乎没有任何权限。

最重要的是,Jenkins 需要使用 kube-apiserver 进行身份验证——使用不记名令牌或由 k8s 集群的 CA 密钥签名的客户端证书。

方法 1.如果 Jenkins 托管在 k8s 集群中,这是首选:

  1. 在 k8s 中为插件创建一个 ServiceAccount
  2. 创建绑定到 ServiceAccount 的 RBAC 配置文件(即 Role/RoleBinding 或 ClusterRole/ClusterRoleBinding)
  3. 将插件配置为在访问 URL 时使用 ServiceAccount 的令牌https://192.168.70.94:6443/api/v1/...

方法2.如果Jenkins托管在k8s集群外,上述步骤仍然可以使用。替代方法是:

  1. 创建一个绑定到 k8s 集群 CA 的客户端证书。您必须找到 CA 密钥的保存位置并使用它来生成客户端证书。
  2. 创建绑定到客户端证书的 RBAC 配置文件(即 Role/RoleBinding 或 ClusterRole/ClusterRoleBinding)
  3. 将插件配置为在访问 URL 时使用客户端证书https://192.168.70.94:6443/api/v1/...

这两种方法都适用于任何情况。我相信方法 1 对您来说会更简单,因为您不必弄乱 CA 密钥。

于 2017-07-14T08:08:52.337 回答