我设置了带有主节点和工作节点的 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 但无法弄清楚我到底需要做什么。谢谢
您可以向匿名用户授予管理员权限,但我强烈反对这样做。这将使集群外部的任何人都可以使用该 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: ["*"]
。
希望这有帮助
我也有类似的问题:
我为可观察性工具安装了 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 的访问。现在,我不知道如何让这一切一起工作。