kubernetes 如何编写/使用K8 Python客户端来创建新角色、sa和role绑定

mkh04yzy  于 2022-12-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(218)

我目前正在寻找以编程方式管理Kubernetes集群(eks)的最佳方法。我遇到了一个python Kubernetes客户端,在那里我能够加载本地配置,然后创建一个名称空间。
我正在运行一个jenkins作业,我希望它创建一个命名空间,角色,角色绑定,作为。我已经设法创建了命名空间,但在理解如何调用函数来创建新角色,新角色绑定方面遇到了困难。
下面是使用k8 python客户端创建名称空间的代码片段:

from kubernetes import dynamic, config
from kubernetes import client as k8s_client
from kubernetes.client import api_client
import time, sys

def create_namespace(namespace_api, name):
    namespace_manifest = {
        "apiVersion": "v1",
        "kind": "Namespace",
        "metadata": {"name": name, "resourceversion": "v1"},
    }
    namespace_api.create(body=namespace_manifest)

def delete_namespace(namespace_api, name):
    namespace_api.delete(name=name)

def main():
    # Load local config
    
    client = dynamic.DynamicClient(
        api_client.ApiClient(configuration=config.load_incluster_config())
    )

    namespace_api = client.resources.get(api_version="v1", kind="Namespace")

    # Creating a namespace

    namespace_name = sys.argv[1]
    create_namespace(namespace_api, namespace_name)
    time.sleep(4)

    print("\n[INFO] namespace: " + namespace_name + " created")

if __name__ == '__main__':
    main()

如果你能支持我

ecbunoof

ecbunoof1#

您最有可能使用RbacAuthorizationV1Api,然后可以调用create_namespaced_rolecreate_namespaced_role_binding来生成所需的代码。
代码段可能如下所示

from kubernetes import client, config

config.load_incluster_config()
policy_api = client.RbacAuthorizationV1Api()
role = client.V1Role(
    metadata=client.V1ObjectMeta(name="my-role"),
    rules=[client.V1PolicyRule([""], resources=["pods"], verbs=["get", "list"])],
)
policy_api.create_namespaced_role(namespace="my-namespace", body=role)

role_binding = client.V1RoleBinding(
    metadata=client.V1ObjectMeta(namespace="my-namespace", name="my-role-binding"),
    subjects=[
        client.V1Subject(
            name="user", kind="User", api_group="rbac.authorization.k8s.io"
        )
    ],
    role_ref=client.V1RoleRef(
        api_group="rbac.authorization.k8s.io", kind="Role", name="user-role"
    ),
)
policy_api.create_namespaced_role_binding(namespace="my-namespace", body=role_binding)

一些更有用的例子here

相关问题