Я безуспешно пытался получить доступ к Kubernetes API через HTTPS-вход, и теперь начал задаваться вопросом, возможно ли это вообще?
Любое рабочее подробное руководство по прямому удаленному доступу (без использования прокси-сервера ssh -> kubectl, чтобы избежать управления пользователями на узле Kubernetes) будет приветствоваться.:)
ОБНОВЛЕНИЕ:
Просто чтобы прояснить ситуацию.Это простое развертывание в помещении (без GCE, AWZ, Azure или любого другого), и есть вероятность, что некоторые среды будут полностью автономны (что добавит дополнительные проблемы при получении пакетов установки).
Намерениечтобы иметь возможность использовать kubectl на клиентском хосте с аутентификацией через Keycloak (что также не удается, если следуют пошаговые инструкции).Административный доступ с использованием SSH, а затем kubectl не подходит для доступа клиента.Похоже, мне придется обновить брандмауэр, чтобы открыть порт API и создать службу NodePort.
Установка:
[kubernetes - env] - [FW / SNAT] - [me]
FW / NAT разрешает доступ только через порты 22,80 и 443
Поэтому, когда я настраиваю вход в Kubernetes, я не могу создать правило брандмауэра для перенаправления с 443 на 6443. Кажетсяединственная опция - создание входа https для указания доступа к «api-kubernetes.node.lan» к сервисному порту 6443 kubernetes. Сам по себе Ingress работает нормально, я создал рабочий вход для приложения авторизации Keycloak.
Я скопировал .kube / config с главного узла на мою машину и поместил его в .kube / config (среда Cygwin)
Что было предпринято:
- Проход SSL.Не удалось включить, поскольку контроллер kubernetes-ingress не смог запуститься из-за невозможности создать промежуточный сертификат.Даже если бы он был запущен, он, скорее всего, нанес бы ущерб другим входам HTTPS.
- Создан самозаверяющий сертификат SSL.В результате через браузер я мог получить вывод API, указав на https://api -kubernetes.node.lan / api .Однако kubectl выдает ошибку из-за неподписанного сертификата, что очевидно.
- Поместите apiserver.crt во входной файл: определение.Получил ошибку из-за сертификата не подходит для api-kubernetes.node.lan.Также очевидно.
Следуя инструкциям [1], создайте подписанный сертификат kube-ca.Теперь браузер вообще ничего не показывает.Использование curl для доступа к https://api -kubernetes.node.lan / api приводит к пустому выводу (я вижу HTTP OK при использовании -v).Kubectl теперь получает следующую ошибку:
$ kubectl.exe version
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.0", GitCommit:"91e7b4fd31fcd3d5f436da26c980becec37ceefe", GitTreeState:"clean", BuildDate:"2018-06-27T20:17:28Z", GoVersion:"go1.10.2", Compiler:"gc", Platform:"windows/amd64"}
Error from server: the server responded with the status code 0 but did not return more information
При попытке сравнить apiserver.pem и мой сгенерированный сертификат я вижу единственную разницу:
apiserver.pem
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
generated.crt
X509v3 Extended Key Usage:
TLS Web Server Authentication
Входная конфигурация:
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: kubernetes-api
namespace: default
labels:
app: kubernetes
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- secretName: kubernetes-api-cert
hosts:
- api-kubernetes.node.lan
rules:
- host: api-kubernetes.node.lan
http:
paths:
- path: "/"
backend:
serviceName: kubernetes
servicePort: 6443
Ссылки: [1] https://db -blog.web.cern.ch / blog / lukas-gedvilas / 2018-02-creation-tls-сертификаты-using-kubernetes-апи