Skip to main content

Требования к API управления контейнерами клиентов

Cписок запросов к реализации:

1) Создать клиента
2) Получить статус контейнера
3) Получить конфиг клиента
4) Изменить конфиг клиента
5) Изменить статус контейнера
6) Получить список клиентов 

Требования по безопасности:

Доступ только внутри сети. Дополнительных требований по безопасности (авторизация и др.) не предусматривается

1. Создание клиента

Выполнение запроса включает в себя:

Операция

Запрос k8s

Создание базы clickhouse

POST {{api-root-url}}/apis/batch/v1/namespaces/{{namespace-id}}/jobs

Создание базы postgres

POST {{api-root-url}}/apis/batch/v1/namespaces/{{namespace-id}}/jobs

Создние конфигурации

POST {{api-root-url}}/api/v1/namespaces/{{namespace-id}}/configmaps

Создание закрытого ключа среды клиента

POST {{api-root-url}}/api/v1/namespaces/{{namespace-id}}/secrets

Создание сервиса

POST {{api-root-url}}/api/v1/namespaces/{{namespace-id}}/services

Создание записи ingress

POST {{api-root-url}}/apis/networking.k8s.io/v1/namespaces/{{namespace-id}}/ingresses

Создание развертывания

POST {{api-root-url}}/apis/apps/v1/namespaces/{{namespace-id}}/deployments

К верхней табличке: Создание базы clickhouse и Создание базы postgres Глеб описал что не нужно (нужно обсудить перед реализацией)

Входные параметры:

Параметр

Описание

api_root_url

Общий параметр.

namespace_id

Общий параметр. [lms-dev, lms-prod]

client_id

Общий параметр. Нужен в каждом запросе. Формируется системой по шаблону C<Номер среды>

settings

Массив настроек клиента. Содержит в себе структуры с полями name, value.

Выходные параметры:

Параметр

Описание

code

Код выполнения. 0 – выполнено без ошибок. Коды отличные от нуля – не выполнено, в результате выполнения ошибка

message

Описание выполнения запроса

client_id

Идентификатор созданного клиента. Можно не передавать, если результат не 0

namespace_id

Идентификатор пространства имен, созданного клиента. Можно не передавать, если результат не 0

Пример текста запроса:

{
  "api_root_url":"https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/",
  "namespace_id":"lms-dev",
  "client_id":"C228",
  "settings":[
    {
      "name":"clickhouse_host",
      "value":"10.66.139.55"
    },
    {
      "name":"clickhouse_admin_user",
      "value":"default"
    },
    {
      "name":"clickhouse_admin_password",
      "value":"ABWsBh+Q"
    },
    {
      "name":"clickhouse_user_password",
      "value":"clickhousepass"
    },
    {
      "name":"sms4b_passcode_lifetime_seconds",
      "value":"120"
    },
    {
      "name":"sms4b_sender",
      "value":"1C-RARUS"
    }
   ]
}

Пример текста ответа:

{
  "code":0,
  "message":"Операция выполнена успешно",
  "client_id":"C228",
  "namespace_id":"lms-dev"
}

 

2. Получить статус контейнера

В результате запроса нам нужно получить статус контейнера клиента.
Выполнение запроса включает в себя:

Операция

Запрос k8s

Мониторинг pod-а

{{api-root-url}}/api/v1/namespaces/{{namespace-id}}/pods?labelSelector=app={{client-id}}-lms

Но присылает он не только клиентов, нужно их фильтровать.

Входные параметры:

Параметр

Описание

api_root_url

https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/

namespace_id

 [lms-dev, lms-prod]

client_id

Формируется системой по шаблону C<Номер среды>

Выходные параметры:

Параметр

Описание

сode

Код выполнения. 0 – выполнено без ошибок. Коды отличные от нуля – не выполнено, в результате выполнения ошибка

message

Описание выполнения запроса

status

Можно достать статус контейнера. На основании статусов k8s
(Running, Error, Containercreating и тд)

replicas

0,1 (выключена/включена)

Пример текста запроса:

{
  "api_root_url":"https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/",
  "namespace_id":"lms-dev",
  "client_id":"C228"
}

Пример текста ответа:

{
  "code":0,
  "message":"Операция выполнена успешно",
  "status":"Running",
  "replicas":"1"
}

 

3. Получить конфиг клиента

В результате запроса нам нужно получить конфиг клиента.
Выполнение запроса включает в себя:

Операция

Запрос k8s

Получить конфиг

{{api-root-url}}//api/v1/namespaces//{{namespace-id}}/configmaps/lms-config-[ client-id]'

Входные параметры:

Параметр

Описание

api_root_url

https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/

namespace_id

[lms-dev, lms-prod]

client_id

Формируется системой по шаблону C<Номер среды>

Выходные параметры:

Параметр

Описание

code

Код выполнения. 0 – выполнено без ошибок. Коды отличные от нуля – не выполнено, в результате выполнения ошибка

message

Описание выполнения запроса

settings

Массив настроек. Где настройка это структура с полями name,value

+ Будем ли тут явно получать clickhouse/postgres? Нужно ли присылать пароли как ******?

Пример текста запроса:

{
  "api_root_url":"https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/",
  "namespace_id":"lms-dev",
  "client_id":"C228"
}

Пример текста ответа:

{
  "code":0,
  "message":"Операция выполнена успешно",
  "settings":[
    {
     "name":"keys_token_ttl_hours",
     "value":"8"
    },
    {
     "name":"sms4b_sender",
     "value":"1C-RARUS"
    }
  ]
}

4. Изменить конфиг клиента

    В результате запроса нам нужно изменить конфиг клиента. В k8s PUT для полной замены или PATCH для замены значений.
    Выполнение запроса включает в себя:

    Операция

    Запрос k8s

    Изменить конфигурацию

    POST {{api-root-url}}/api/v1/namespaces/{{namespace-id}}/configmaps/lms-config{{client-id}}

    Входные параметры:

    Параметр

    Описание

    api_root_url

    https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/

    namespace_id

    [lms-dev, lms-prod]

    client_id

    Формируется системой по шаблону C<Номер среды>

    settings

    Массив настроек. Где настройка это структура с полями name,value

    + Будем ли тут явно передавать clickhouse/postgres? или как то отдельно присылать

    Выходные параметры:

    Параметр

    Описание

    code

    Код выполнения. 0 – выполнено без ошибок. Коды отличные от нуля – не выполнено, в результате выполнения ошибка

    message

    Описание выполнения запроса

    Пример текста запроса:

    {
      "api_root_url":"https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/",
      "namespace_id":"lms-dev",
      "client_id":"C228",
      "settings":[
        {
         "name":"keys_token_ttl_hours",
         "value":"8"
        },
        {
         "name":"sms4b_sender",
         "value":"1C-RARUS"
        }
      ]
    }

    Пример текста ответа:

    {
      "code":0,
      "message":"Операция выполнена успешно"
    }

     

    5. Изменить статус контейнера

    В результате запроса нам нужно включить/выключить контейнер клиента.
    Выполнение запроса включает в себя:

    Операция

    Запрос k8s

    Включить/отключить клиента

    PATCH {{api-root-url}}//apis/apps/v1/namespaces//{{namespace-id}}/deployments/lms-deployment-{{client-id}}' --header 'Content-Type: application/strategic-merge-patch+json' --header 'Accept: application/json' --header 'Authorization: Bearer ••••••' --data '{

      "spec": {

        "replicas": 0 // менять тут 0/1

      }

    }'

    Входные параметры:

    Параметр

    Описание

    api_root_url

    https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/

    namespace_id

    [lms-dev, lms-prod]

    client_id

    Формируется системой по шаблону C<Номер среды>

    operation

    0, 1

    Выходные параметры:

    Параметр

    Описание

    code

    Код выполнения. 0 – выполнено без ошибок. Коды отличные от нуля – не выполнено, в результате выполнения ошибка

    message

    Описание выполнения запроса

    Пример текста запроса:

    {
      "api_root_url":"https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/",
      "namespace_id":"lms-dev",
      "client_id":"C228",
      "operation":"0"
    }

    Пример текста ответа:

    {
      "code":0,
      "message":"Операция выполнена успешно"
    }

    6. Получить список клиентов

    В результате запроса нам нужно получить список клиентов.
    Выполнение запроса включает в себя:

    Операция

    Запрос k8s

    Получить список клиентов

    {{api-root-url}}/api/v1/namespaces/{{namespace-id}}/pods, но нужно или фильтровать или добавлять метку со стороны Глеба. Так же там возвращается очень подробная инфа по клиенту, но нам нужно совсем немного, возможно как то можно скорректировать поведение со стороны Глеба

     

    Входные параметры:

    Параметр

    Описание

    api_root_url

    https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/

    namespace_id

    [lms-dev, lms-prod]

    Выходные параметры:

    Параметр

    Описание

    code

    Код выполнения. 0 – выполнено без ошибок. Коды отличные от нуля – не выполнено, в результате выполнения ошибка

    message

    Описание выполнения запроса

    clients

    Массив структур клиентов. Включает в себя client-id, namespace-id,

    status (из запроса 2),

    replicas (из запроса 2)

    Пример текста запроса:

    {
      "api_root_url":"https://rancher.rarus.cloud/k8s/clusters/c-m4hlh/",
      "namespace_id":"lms-dev"
    }

    Пример текста ответа:

    {
      "code":0,
      "message":"Операция выполнена успешно",
      "clients":[
        {
          "client_id":"C228",
          "namespace_id":"lms-dev",
          "status":"Running",
          "replicas":"1"
        }, 
        {
          "client_id":"C229",
          "namespace_id":"lms-prod",
          "status":"Running",
          "replicas":"1"
        }
      ]
    }