Как настроить клиент k8s так, чтобы он мог общаться с CRD k8s из модуля кластера k8s? - PullRequest
0 голосов
/ 07 февраля 2019

Во всех примерах java-клиента k8s используется клиент по умолчанию, см. здесь .

ApiClient client = Config.defaultClient();
Configuration.setDefaultApiClient(client);

Как настроить клиент k8s таким образом, чтобы он мог общаться с CRD k8s (скажем, спаркодератор) из модуля кластера k8s?Как мне настроить этот клиент?(basePath, аутентификации?) И какой basePath я должен использовать в модуле в том же кластере k8s?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы также можете использовать defaultClient для этого.

Метод defaultClient() создаст клиента в кластере, если приложение работает внутри кластера и имеет правильную учетную запись службы.

Правила для defaultClient можно увидеть в комментарияхпо методу здесь :

/**
   * Easy client creation, follows this plan
   *
   * <ul>
   *   <li>If $KUBECONFIG is defined, use that config file.
   *   <li>If $HOME/.kube/config can be found, use that.
   *   <li>If the in-cluster service account can be found, assume in cluster config.
   *   <li>Default to localhost:8080 as a last resort.
   * </ul>
   *
   * @return The best APIClient given the previously described rules
   */

Так что, если приложение, использующее Java-клиент k8s, запускается на кластере само по себе, оно должно иметь возможность доступа к содержимому кластера до тех пор, покау него есть правильное разрешение.Вам необходимо разрешить клиентскому приложению иметь доступ к CRD, как в этом примере ClusterRole для CRD оператора Prometheus :

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: prometheus-crd-view
  labels:
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
- apiGroups: ["monitoring.coreos.com"]
  resources: ["alertmanagers", "prometheuses", "prometheusrules", "servicemonitors"]
  verbs: ["get", "list", "watch"]
0 голосов
/ 08 февраля 2019

Вы можете использовать Kubernetes API, вам просто нужно установить curl.

curl http://localhost:8080/api/v1/namespaces/default/pods

Просто измените localhost на apiserver ip address / dns name

Вы должны прочитать документацию Kubernetes API .

Кроме того, вам необходимо настроить RBAC для доступа и разрешений.Контейнеры внутри кластера заполнены токеном, который используется для аутентификации на сервере API.Вы можете проверить это, выполнив cat /var/run/secrets/kubernetes.io/serviceaccount/token внутри POD.

. При этом ваш запрос к серверу из контейнера может выглядеть следующим образом:

curl -ik \
     -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
     https://kubernetes.default.svc.cluster.local/api/v1/namespaces/default/pods

Youможно также установить kubectl внутри контейнера, также задав необходимые разрешения, см. подробности .

Рекомендую прочитать: Установка kubectl в Pod Kubernetes * и Вызов API Kubernetes происходит изнутри кластера!

Что касается других клиентов Java, существуют также неофициальные клиентские библиотеки, такие как Java (OSGi) и Java (Fabric8, OSGi) .

...