0

我是 Kubernetes 世界的新手,但前段时间我使用 OperatorSDK 和 Golang 开发了一个 Kubernetes 运算符。我使用集群管理员角色来运行操作员 pod,但现在我想减少操作员可以使用的资源。

是否有一些工具可以扫描操作员的代码并生成适当的集群角色?或者有什么聪明的方法可以找到运营商使用了哪些资源?

4

2 回答 2

1

假设您需要为您的集群角色添加权限,因为您的控制器正在协调 Kubernetes 工作负载本身,您可以使用 operator-builder 项目(请参阅https://github.com/vmware-tanzu-labs/operator-builder)来执行此操作为你。自动为您执行此操作的代码位于https://github.com/vmware-tanzu-labs/operator-builder/blob/main/internal/workload/v1/rbac.go#L104

OperatorSDK 的模式对于您当前正在做的事情会很熟悉,因为 OperatorSDK 和 Operator Builder 都是 Kubebuilder 的插件,因此遵循类似的模式(例如<command> init <args><command> create api <args>.

例子:

您的配置(特定于项目的构造)如下所示:

name: webstore
kind: StandaloneWorkload
spec:
  api:
    domain: acme.com
    group: apps
    version: v1alpha1
    kind: WebStore
    clusterScoped: false
  resources:
  - resources.yaml

基本上你的输入(resources.yaml来自上面的配置)将是这样的:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webstore-deploy
spec:
  replicas: 2  # +operator-builder:field:name=webStoreReplicas,default=2,type=int
  selector:
    matchLabels:
      app: webstore
  template:
    metadata:
      labels:
        app: webstore
    spec:
      containers:
      - name: webstore-container
        #+operator-builder:field:name=webstoreImage,default="nginx:1.17",type=string,description="Defines the web store image"
        image: nginx:1.17
        ports:
        - containerPort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: webstore-ing
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: app.acme.com
    http:
      paths:
      - path: /
        backend:
          serviceName: webstorep-svc
          servicePort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: webstore-svc # +operator-builder:field:name=serviceName,type=string,default="webstore-svc"
spec:
  selector:
    app: webstore
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

运行以下命令:

operator-builder init \
    --workload-config <path_to_config> \
    --repo github.com/acme/acme-cnp-mgr \
    --skip-go-version-check

operator-builder create \
create api \
    --workload-config <path_to_config> \
    --controller \
    --resource

您的输出将类似于(在控制器文件中):

// +kubebuilder:rbac:groups=apps.acme.com,resources=webstores,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps.acme.com,resources=webstores/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=core,resources=services,verbs=get;list;watch;create;update;patch;delete

当您运行该make manifests命令时,您的 RBAC 将根据正确的 Kubebuilder 标记生成。

免责声明:我是该项目的主要贡献者,当然认为这将有助于自动生成 RBAC 标记。:)

于 2021-10-12T16:33:37.517 回答
0

最简单的方法可能是删除所有权限,然后根据抛出的错误添加每个权限

于 2020-10-17T21:55:02.117 回答