K8 RBAC环境无法访问Ambassador

Unable to access Ambassador in K8 RBAC environment

在 RBAC 环境中部署 Ambassador 并使用节点端口创建服务

[root@-1 xxxxx]# kb get svc -n ambassador
NAME               TYPE        CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
ambassador         NodePort    172.18.0.216   12.197.35.74   80:31270/TCP,443:31729/TCP   17h

试图访问 UI https://12.197.35.74/,出现以下错误

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

看来我遗漏了与 RBAC 相关的内容,非常感谢任何帮助

此错误意味着您无权访问 API 服务器,因为它不知道您是谁。这很好,否则任何人都可以操纵您的集群。

最新的kubernetes部署工具在集群上启用了RBAC。 Ambassador 在访问 https://12.197.35.74/ 时降级为 catch-all 用户 system:anonymous。该用户几乎没有 kube-apiserver.

的权限

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

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

Kubernetes API 服务器是 Kubernetes 集群的大脑。您应该将对它的访问限制在绝对最低限度,使用标准网络和防火墙机制限制从集群外部到 API 服务器的访问,以及使用 Kubernetes 网络策略从集群内部访问。

看看:kube-apiserver-error, kubernetes-api-server, kube-apiserver-forbidden-messages, .