是否可以创建 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可以抓取你的请求然后你查看内容+发起请求的用户。

这不是直截了当的,也不是简单的,但是您将能够实现您的要求。