是否可以创建 Kubernetes RBAC 规则来禁止创建负载均衡器?
Is it possible to create a Kubernetes RBAC rule to disallow creation of load balancers?
使用Kubernetes RBAC,我们可以通过特定动词限制对特定资源的访问。
有没有办法禁止使用 type=LoadBalancer
创建服务,同时允许其他类型的服务(例如 type=NodePort
)?
我们要禁止的示例 Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
clusterIP: 10.0.171.239
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 192.0.2.127
以下是我们可以定义的最接近的 RBAC 角色 - 禁止对所有服务进行更新操作(禁止的比我们想要的多):
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: developer
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["services"]
verbs: ["get", "watch", "list"]
无法限制您的要求。
正如您提到的,您发现可以限制对 API(资源 && 动词)的访问,但不能以简单的方式限制资源的内容。
如果你在 `Admission Control hooks' 中编写自己的钩子,你将能够做这样的事情
Admission Control hooks
可以抓取你的请求然后你查看内容+发起请求的用户。
这不是直截了当的,也不是简单的,但是您将能够实现您的要求。
使用Kubernetes RBAC,我们可以通过特定动词限制对特定资源的访问。
有没有办法禁止使用 type=LoadBalancer
创建服务,同时允许其他类型的服务(例如 type=NodePort
)?
我们要禁止的示例 Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
clusterIP: 10.0.171.239
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 192.0.2.127
以下是我们可以定义的最接近的 RBAC 角色 - 禁止对所有服务进行更新操作(禁止的比我们想要的多):
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: developer
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["services"]
verbs: ["get", "watch", "list"]
无法限制您的要求。
正如您提到的,您发现可以限制对 API(资源 && 动词)的访问,但不能以简单的方式限制资源的内容。
如果你在 `Admission Control hooks' 中编写自己的钩子,你将能够做这样的事情
Admission Control hooks
可以抓取你的请求然后你查看内容+发起请求的用户。
这不是直截了当的,也不是简单的,但是您将能够实现您的要求。