我在多租户节点应用程序中工作,我知道在Kubernetes中创建新的名称空间可以按以下方式运行kubectl命令:
kubectl create namespace <namespace name>
当新客户注册新帐户时,如何从节点微服务创建新的命名空间?
是否有一些kubectl API可以从外部应用程序发出请求?
用户是否需要从应用程序注销,销毁在kubernetes中创建的Pod?
答案 0 :(得分:15)
就像从应用程序中的shell调用一样简单:
kubectl create namespace <your-namespace-name>
本质上,kubectl与kube-apiserver对话。
您也可以直接调用kube-apiserver。这是列出豆荚的示例:
$ curl -k -H 'Authorization: Bearer <token>' \
https://$KUBERNETES_SERVICE_HOST:6443/api/<api-version>/namespaces/default/pods
更具体地说是创建名称空间:
$ curl -k -H -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token>' \
https://$KUBERNETES_SERVICE_HOST:6443/api/v1/namespaces/ -d '
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "mynewnamespace"
}
}'
如果您想知道<token>
,它是Kubernetes Secret,通常属于ServiceAccount,并绑定到ClusterRole
,允许您创建名称空间。
您可以这样创建一个服务帐户:
$ kubectl create serviceaccount namespace-creator
然后您将看到这样的令牌(令牌会自动生成):
$ kubectl describe sa namespace-creator
Name: namespace-creator
Namespace: default
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: namespace-creator-token-xxxxx
Tokens: namespace-creator-token-xxxxx
Events: <none>
那么您将获得秘密:
$ kubectl describe secret namespace-creator-token-xxxxx
Name: namespace-creator-token-xxxx
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name: namespace-creator
kubernetes.io/service-account.uid: <redacted>
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 7 bytes
token: <REDACTED> <== 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的问题。
答案 1 :(得分:1)
取决于实现Microservice
的语言,您可以只在该微服务中使用Client library
或以您选择的语言编写新的微服务,如上面的回答,请使用{ {1}}和service account
可以创建名称空间。而且您走的很好。
客户端库here:
答案 2 :(得分:0)
您可以使用以下命令创建命名空间:
kubectl创建名称空间<< namespace_name >> 。
请在下面找到一些示例
kubectl create namespace dev
kubectl create namespace test
kubectl create namespace prod
要查看创建的名称空间:
kubectl get namespace
or
kubectl get ns
or
kubectl get namespaces
要避免在每次kubectl命令执行中都提及名称空间,例如在创建pod,deployment或任何其他kubernetes对象时,请按如下所述设置名称空间:
kubectl config set-context --current --namespace=test
希望这对您有帮助!