【问题标题】:How to write/use K8 Python client to create a new role, sa & role binding如何编写/使用K8 Python客户端创建新角色、sa&角色绑定
【发布时间】:2022-11-29 15:02:31
【问题描述】:

我目前正在寻找以编程方式管理 Kubernetes 集群 (eks) 的最佳方式。我遇到了一个 python Kubernetes 客户端,我可以在其中加载本地配置,然后创建一个命名空间。

我正在运行一个 jenkins 作业,我希望它创建一个名称空间、角色、角色绑定等。我设法创建了命名空间,但无法理解如何调用该函数来创建新角色、新角色绑定。

这是使用 k8 python 客户端创建命名空间的 sn-p:

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()

我将不胜感激任何支持

【问题讨论】:

    标签: python kubernetes client programmatically k8s-serviceaccount


    【解决方案1】:

    您很可能希望使用RbacAuthorizationV1Api。之后您可以致电create_namespaced_rolecreate_namespaced_role_binding制作您需要的东西。

    sn-p 可能看起来像

    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

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 2018-12-16
      • 2019-06-26
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2018-09-23
      • 2016-07-19
      • 2020-08-25
      相关资源
      最近更新 更多