我是 Kubernetes 世界的新手,但前段时间我使用 OperatorSDK 和 Golang 开发了一个 Kubernetes 运算符。我使用集群管理员角色来运行操作员 pod,但现在我想减少操作员可以使用的资源。
是否有一些工具可以扫描操作员的代码并生成适当的集群角色?或者有什么聪明的方法可以找到运营商使用了哪些资源?
我是 Kubernetes 世界的新手,但前段时间我使用 OperatorSDK 和 Golang 开发了一个 Kubernetes 运算符。我使用集群管理员角色来运行操作员 pod,但现在我想减少操作员可以使用的资源。
是否有一些工具可以扫描操作员的代码并生成适当的集群角色?或者有什么聪明的方法可以找到运营商使用了哪些资源?
假设您需要为您的集群角色添加权限,因为您的控制器正在协调 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 标记。:)
最简单的方法可能是删除所有权限,然后根据抛出的错误添加每个权限