Как я создаю новое пространство имен в Kubernetes - PullRequest
0 голосов
/ 20 октября 2018

Я работаю в мультитенантном приложении узла, я знаю, что для создания нового пространства имен в Kubernetes можно выполнить команду kubectl следующим образом: kubectl create namespace <namespace name>

Как создать новое пространство имен из узлаМикроуслуги, когда новый клиент регистрирует новую учетную запись?

Существует ли какой-либо API-интерфейс kubectl для отправки запроса из внешнего приложения?

Требуется ли пользователю выйти из приложенияуничтожить стручки, созданные в Куберне?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Зависит от языка, на котором реализован ваш Microservice, вы можете просто использовать Client library внутри этого микросервиса или написать новый микросервис на выбранном вами языке, и, как указано выше, использовать service account с ClusterRoleBinding, которые могут создавать пространства имен.и вы готовы идти.

Клиентские библиотеки здесь :

  • Python
  • Go
  • Java
  • Javascript
0 голосов
/ 20 октября 2018

Это может быть так же просто, как вызов из оболочки в вашем приложении:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...