Kubernetes - 向 kube dns 中的匿名用户授予 RBAC 访问权限

问题描述 投票:0回答:2

我设置了带有主节点和工作节点的 Kubernetes 集群。 Kubectl cluster-info 显示 kubernetes-master 以及 kube-dns 成功运行。

我正在尝试访问以下 URL,由于它是我的组织内部的,因此以下 URL 对外部世界不可见。

https://10.118.3.22:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

但是当我访问它时出现以下错误 -

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "services \"kube-dns:dns\" is forbidden: User \"system:anonymous\" cannot get resource \"services/proxy\" in API group \"\" in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "kube-dns:dns",
    "kind": "services"
  },
  "code": 403
}

请让我知道如何授予匿名用户完全访问权限。我阅读了https://kubernetes.io/docs/reference/access-authn-authz/rbac/中提到的RBAC 但无法弄清楚我到底需要做什么。谢谢

kubernetes kubectl kube-dns
2个回答
4
投票

您可以向匿名用户授予管理员权限,但我强烈反对这样做。这将使集群外部的任何人都可以使用该 url 访问服务。

即使您决定将所有访问权限授予匿名用户,您也可以按照以下方式进行操作:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: anonymous-role
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: anonymous-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: anonymous-role
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: system:anonymous

这将给予匿名:用户代理您的服务,而不是所有资源。如果您希望所有资源都如此,则需要在匿名角色中提供

resources: ["*"]

希望这有帮助


0
投票

我也有类似的问题:

我为可观察性工具安装了 Helm 模板,但它附带了一些角色和 RoleBindings。默认情况下,这些配置可能不允许流量流向 kube-dns 服务。

我尝试了 Prafull Ladha 给出的解决方案。但这部分有效:

Prafull Ladha 的 ClusterRole :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: anonymous-role
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  verbs: ["*"]

来自 Prafull Ladha 的 ClusterRoleBinding :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: anonymous-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: anonymous-role
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: system:anonymous

我尝试了有一点变化的波纹管命令。 没有它我就有:

curl: (6) Could not resolve host: mac-address-registraton

我有了:

curl: (28) Failed to connect to mac-address-registration port 80 after 130122 ms: Couldn't connect to server

这是我添加的所有 RBAC,但仍然不起作用。

角色:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: demo-role
  namespace: default
rules:
  - apiGroups:
      - "*"
    resources:
      - "*"
    verbs:
      - "*"

角色绑定:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: demo-role-binding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: demo-role
subjects:
  - namespace: default
    kind: ServiceAccount
    name: mac-address-registration

因此,我在两个不同的命名空间中有两个不同的服务,但它们无法相互通信。 RBAC 似乎阻止了对 DNS 的访问。现在,我不知道如何让这一切一起工作。

© www.soinside.com 2019 - 2024. All rights reserved.