Как изменить / установить внутренний IP-адрес или общедоступный IP-адрес главного узла k8s?

Я установил k3s на облачную виртуальную машину. (k3s очень похож на k8s.)

Сервер k3s запускается как главный узел.

И метка главного узла показывает, что internal-ip равен 192.168.xxx.xxx. Аннотации главного узла показывают, что public-ip тоже 192.168.xxx.xxx.

Но настоящий публичный IP-адрес Cloud VM - 49.xx.xx.xx. Таким образом, агент с другой машины не может подключиться к этому главному узлу. Потому что агент всегда пытается подключить прокси "wss://192.168.xxx.xxx:6443/...".

Если я запускаю ifconfig на облачной виртуальной машине, public-ip(49.xx.xx.xx) не отображается. Таким образом, k3s не может найти правильный внутренний или публичный IP.

Я пытаюсь запустить k3s с --bind-address=49.xx.xx.xx, но запустить не удалось. Я думаю, с этим ip-адресом нет привязки NIC.

Как решить эту проблему, если я попытаюсь создать виртуальную сетевую карту с адресом 49.xx.xx.xx?

2 ответа

Лучший вариант для подключения мастера и узлов Kubernetes - использование частной сети.

Как настроить мастер K3S и одноузловой кластер:

Предпосылки:

  • Все машины должны находиться в одной частной сети. Например 192.168.0.0/24
  • Все машины должны общаться друг с другом. Вы можете пинговать их с помощью:$ ping IP_ADDRESS

В этом примере есть 2 виртуальные машины:

  • Главный узел (k3s) с частным IP 10.156.0.13
  • Рабочий узел (k3s-2) с частным ip 10.156.0.8

Установите соединение между виртуальными машинами

Самое главное - проверить, могут ли машины подключаться друг к другу. Как я уже сказал, лучший способ - просто пропинговать их.

Подготовить главный узел

Чтобы установить K3S на главном узле, вам нужно вызвать команду от пользователя root:

$ curl -sfL https://get.k3s.io | sh -

Результат этой команды должен быть таким:

[INFO]  Finding latest release
[INFO]  Using v0.10.2 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v0.10.2/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v0.10.2/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Проверьте, работает ли главный узел:

$ kubectl get nodes

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

NAME   STATUS   ROLES    AGE     VERSION
k3s    Ready    master   2m14s   v1.16.2-k3s.1

Получите IMPORTANT_TOKEN с главного узла с помощью команды:

$ cat /var/lib/rancher/k3s/server/node-token

Этот токен будет использоваться для подключения узла агента к главному узлу. Скопируйте это

Подключить узел агента к главному узлу

Убедитесь, что узел может связываться с мастером. После этого вы можете вызвать команду от пользователя root:

$ curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_NODE_IP:6443 K3S_TOKEN=IMPORTANT_TOKEN sh -

Вставьте свой IMPORTANT_TOKEN в эту команду.

В этом случае MASTER_NODE_IP - это 10.156.0.13.

Вывод этой команды должен выглядеть так:

[INFO]  Finding latest release
[INFO]  Using v0.10.2 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v0.10.2/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v0.10.2/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO]  systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO]  systemd: Starting k3s-agent

Контрольная работа

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

$ kubectl get nodes

Здесь должен быть виден добавленный ранее узел:

NAME    STATUS   ROLES    AGE     VERSION
k3s     Ready    master   15m     v1.16.2-k3s.1
k3s-2   Ready    <none>   3m19s   v1.16.2-k3s.1

Из приведенных выше выходных данных следует, что подготовка прошла правильно.

РЕДАКТИРОВАТЬ1: с этого момента вы можете развертывать модули и предоставлять их в общедоступное IP-пространство.

РЕДАКТИРОВАТЬ2:

Вы можете подключить главный и рабочий узлы K3S к общедоступной IP-сети, но для этого есть некоторые предварительные условия.

Предварительные требования:

  • На главном узле должен быть открыт порт 6443/TCP.
  • Убедитесь, что главный узел зарезервировал статический IP-адрес
  • Убедитесь, что правила брандмауэра настроены так, чтобы разрешать доступ только по IP-адресу рабочих узлов (в этом могут помочь статические IP-адреса узлов)

Подготовка главного узла

Развертывание главного узла такое же, как указано выше. Единственная разница в том, что вам нужно получить его публичный IP-адрес.

Вашему главному узлу не нужно отображать ваш общедоступный IP-адрес в таких командах, как:

  • $ ip a
  • $ ifconfig

Подготовка рабочих узлов

Развертывание рабочих узлов отличается только способом изменения IP-адреса главного узла с частного на общедоступный. Вызовите эту команду из учетной записи root:
curl -sfL https://get.k3s.io | K3S_URL=https://PUBLIC_IP_OF_MASTER_NODE:6443 K3S_TOKEN=IMPORTANT_TOKEN sh -

Тестирование кластера

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

$ kubectl get nodes

Результат должен быть примерно таким:

NAME    STATUS   ROLES    AGE   VERSION
k3s-4   Ready    <none>   68m   v1.16.2-k3s.1
k3s-1   Ready    master   69m   v1.16.2-k3s.1
k3s-3   Ready    <none>   69m   v1.16.2-k3s.1
k3s-2   Ready    <none>   68m   v1.16.2-k3s.1

Здесь должны быть видны все узлы.

У меня тоже была такая же проблема, и я наконец нашел решение. Вы можете запустить свой сервер с помощью--node-external-ip, как это sudo k3s server --node-external-ip 49.xx.xx.xx, а агенту нужно настроить env или начать с sudo k3s agent --server https://49.xx.xx.xx:6443 --token ${K3S_TOKEN}, то ваше локальное устройство (граничный узел) с частного IP-адреса может подключиться к общедоступному облаку.

Использование флага (listener) IP address that apiserver uses to advertise to members of the cluster (default: node-external-ip/node-ip)

На этом рисунке показан мой компьютер, подключенный к удаленному серверу, я тестирую его, raspberry 4B тоже успешно.

Балансировщик нагрузки не переключает общедоступный IP-адрес на частный, и когда я использую git blame, время добавления функции флага - 2019.10.26

Другие вопросы по тегам