我在多租户节点应用程序中工作,我知道在Kubernetes中创建一个新的命名空间可以运行kubectl命令,如下所示:
kubectl create namespace
当新客户注册新帐户时,如何从节点微服务创建新的命名空间?
是否有一些kubectl API来从外部应用程序发出请求?
用户必须从应用程序注销,销毁在kubernetes中创建的pod吗?
它可以像在应用程序中从shell调用一样简单:
kubectl create namespace
从本质上讲,kubectl与kube-apiserver交谈.
您也可以直接致电kube-apiserver.这是列出pod的示例:
$ curl -k -H 'Authorization: Bearer' \ https://$KUBERNETES_SERVICE_HOST:6443/api/ /namespaces/default/pods
更具体地说,创建命名空间:
$ curl -k -H -X POST -H 'Content-Type: application/json' \ -H 'Authorization: Bearer' \ https://$KUBERNETES_SERVICE_HOST:6443/api/v1/namespaces/ -d ' { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "mynewnamespace" } }'
如果你想知道
它,它是一个Kubernetes Secret,通常属于一个ServiceAccount,并绑定到一个ClusterRole
允许你创建命名空间的.
您可以像这样创建一个服务帐户:
$ kubectl create serviceaccount namespace-creator
然后你会看到这样的令牌(自动生成一个令牌):
$ kubectl describe sa namespace-creator Name: namespace-creator Namespace: default Labels:Annotations: Image pull secrets: Mountable secrets: namespace-creator-token-xxxxx Tokens: namespace-creator-token-xxxxx Events:
然后你会得到秘密:
$ kubectl describe secret namespace-creator-token-xxxxx Name: namespace-creator-token-xxxx Namespace: default Labels:Annotations: kubernetes.io/service-account.name: namespace-creator kubernetes.io/service-account.uid: Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 7 bytes token: <== This is the token you need for Authorization: Bearer
你ClusterRole
应该看起来像这样:
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: namespace-creator rules: - apiGroups: ["*"] resources: ["namespaces"] verbs: ["create"]
然后你会像这样绑定它:
$ kubectl create clusterrolebinding namespace-creator-binding --clusterrole=namespace-creator --serviceaccount=namespace-creator
在编写代码时,您可以使用任何语言的任何HTTP客户端库来调用相同的端点.
还有像client-go库这样的库可以处理连接到kube-apiserver的管道.