Это может быть так же просто, как вызов из оболочки в вашем приложении:
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.