kubectl через балансировщик нагрузки - PullRequest
0 голосов
/ 17 мая 2018

Поток:
кластер kubernetes с сервером API (https://192.168.0.10:6443) <-> балансировщик нагрузки (10.10.0.2) <-> ноутбук.

Идея:
На моем ноутбуке я бы хотел запустить kubectl, указывающий на балансировщик нагрузки, где уважаемый прокси перенаправит меня на сервер API.

Шаги:
- Iизменил ip сервера в файле kubeconfig (на моем ноутбуке) на IP-адрес LB:
был https://192.168.0.10:6443 равен http://10.10.0.2:8080/
- я настроил nginx следующим образом:

server {
    listen 8080 default_server;
    listen [::]:8080 default_server;
    server_name _;
    location / {
            proxy_pass https://192.168.0.10:6443;
    }
}

Сейчас выполняетсянапример, kubectl получить узлы Я ожидал получить список узлов, но он не будет работать:

ошибка: Вы должны войти в систему на сервере (неавторизовано)

$ curl http://10.10.0.2:8080/
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "Unauthorized",
  "reason": "Unauthorized",
  "code": 401

Если я добавлю в конфигурацию nginx:

ssl on;
ssl_certificate /root/certs/admin-k-master-1.pem;
ssl_certificate_key /root/certs/admin-k-master-1-key.pem;

и изменим IP-адрес файлового сервера kubeconfig на https://10.10.0.2:8080/

$ kubect get nodes
Unable to connect to the server: x509: certificate is valid for 192.168.0.10 not 10.10.0.2

Естьпохожая тема но это не относится к kubectl.

Как мне этого добиться? или что я делаю не так.

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

На моем ноутбуке я бы хотел запустить kubectl, указывающий на балансировщик нагрузки, где уважаемый прокси перенаправит меня на сервер API.

  • Вот как мы настроили такойнагрузочный балансировщик для внешнего доступа.Имейте в виду, что для работы с ssl all-accross вам нужен какой-нибудь ssl-сертификат.У нас есть соответствующий сертификат для my-domain.com (а именно, kubernetes.my-domain.com), но вам, возможно, придется поэкспериментировать с собственной подписью в зависимости от ваших реальных имен ip / dns.Также обратите внимание, что kubernetes - это имя нашего кластера, поэтому, если ваше имя отличается, вам также придется обновить исходную ссылку.

    upstream kube {
       server kubernetes:443;
    }
    
    server {
       listen 80;
       server_name kubernetes.my-domain.com;
       root /nowhere;
       rewrite ^ https://kubernetes.my-domain.com$request_uri permanent;
     }
    
    server {
       listen 443 ssl;
       server_name kubernetes.my-domain.com;
    
       ssl_certificate      /etc/nginx/ssl/kubernetes.my-domain.com.crt;
       ssl_certificate_key  /etc/nginx/ssl/kubernetes.my-domain.com.key;
    
       location / {
         proxy_set_header        Host $host:$server_port;
         proxy_set_header        X-Real-IP $remote_addr;
         proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header        X-Forwarded-Proto $scheme;
         proxy_redirect http:// https://;
         proxy_pass              https://kube;
         # Required for new HTTP-based CLI
         proxy_http_version 1.1;
         proxy_request_buffering off;
         proxy_buffering off; # Required for HTTP-based CLI to work over SSL
       }
    }
    
0 голосов
/ 19 мая 2018

Поместите 10.10.0.2 в 'alt_name' часть openssl.cnf и пересоберите вашу пару ключей apiserver, после чего apiserver обработает запросы к 10.10.0.2 как допустимые.

0 голосов
/ 17 мая 2018

Одним из решений является добавление в файл конфигурации nginx:

proxy_pass 127.0.0.1:8001;

и при запуске экземпляра балансировщика нагрузки:

kubectl прокси.

Тогда это работает.

...