kubernetes аутентификация на сервере API - PullRequest
0 голосов
/ 23 октября 2019

Я настроил кластер kubernetes с нуля. Это просто означает, что я не пользовался услугами, предоставляемыми другими, а использовал сам установщик k8s. Раньше у нас были другие кластеры, но с провайдерами, и они дают вам tls cert and key для аутентификации и т. Д. Теперь этот кластер был настроен мной самостоятельно, у меня есть доступ через kubectl:

$ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   21h
$

Я такжепопробовал это и я могу добавить пользовательский ключ, но затем, когда я пытаюсь выполнить запрос через curl, я получаю pods is forbidden: User "system:anonymous" cannot list resource "pods" in API group "" at the cluster scope.

Я не могу понять, где я могу получить сертификат и ключдля аутентификации пользователя с использованием API для tls auth. Я пытался понять официальные документы, но у меня ничего не получилось. Может ли кто-нибудь помочь мне найти, где находятся эти файлы или как добавить или получить сертификаты, которые я могу использовать для остальных API?

Edit1: мой файл .kube.config выглядит следующим образом:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0t(...)=
    server: https://private_IP:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS(...)Qo=
    client-key-data: LS0(...)tCg==

Он работает с локального хоста просто нормально. В другой руке я кое-что заметил. С локального хоста я могу получить доступ к кластеру, генерируя токен, используя этот метод.

Также обратите внимание, что сейчас я не против создания нескольких ролей для нескольких пользователей и т. Д. Мне просто нужноДоступ к API из удаленного и может быть с использованием «по умолчанию» аутентификации или ролей. Теперь, когда я пытаюсь сделать то же самое с удаленного компьютера, я получаю следующее:

  1. Я попытался использовать этот конфиг для запуска kubectl get all с удаленного компьютера, он работает некоторое время, а затем заканчивается Unable to connect to the server: dial tcp private_IP: 6443 : i/o timeout.
  2. Это происходит потому, что в конфигурации private_IP, тогда я изменил IP на Public_IP:6443 и теперь получаю следующее: Unable to connect to the server: x509: certificate is valid for some_private_IP, My_private_IP, not Public_IP:6443
  3. Имейте в виду, что этои AWS ec2 экземпляр с elastic IP (Вы можете думать о Elastic IP как о общедоступном IP-адресе при традиционной настройке, но этот общедоступный IP-адрес находится на вашем общедоступном маршрутизаторе, а затем этот маршрутизатор направляет запросы на ваш фактический сервер в частной сети). Для фанатов AWS, как я уже сказал, я не могу использовать сервис EKS здесь.

Так как мне получить возможность использовать Public IP?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Похоже, ваша основная проблема - проверка сертификата сервера TLS.

Один из вариантов - указать kubectl пропустить проверку сертификата сервера:

kubectl --insecure-skip-tls-verify ...

Это, очевидно, потенциальнобыть «небезопасным», но это зависит от вашего варианта использования

Другой вариант - воссоздать кластер с публичным IP-адресом, добавленным к сертификату сервера. Также должно быть возможно воссоздать только сертификат с kubeadm без воссоздания кластера. Подробности о последних двух пунктах можно найти в этом ответе .

1 голос
/ 23 октября 2019

Вам необходимо настроить RBAC для пользователя. определить роли и связывание ролей. перейдите по ссылке для справки -> https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/

...