доступ к Kubernetes с удаленных хостов

Я почти уверен, что у меня что-то неправильно настроено или что-то не хватает.

моя домашняя сеть - 10.11.0.0/16

Я устанавливаю экземпляр Kubernetes с

sudo kubeadm init --pod-network-cidr=10.166.0.0/16

Потом установил бязь с

CALICO_IPV4POOL_CIDR=10.166.32.0/20

Затем я настраиваю MetalLB с

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.100.1-192.168.100.254

Я использовал руководство по адресу https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/ с использованием NodePort, и он отлично работает на машине kubernetes:

kubectl describe services example-service
Name:                     example-service
Namespace:                default
Labels:                   app.kubernetes.io/name=load-balancer-example
Annotations:              <none>
Selector:                 app.kubernetes.io/name=load-balancer-example
Type:                     NodePort
IP:                       10.110.245.152
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  30140/TCP
Endpoints:                10.166.32.243:8080,10.166.32.244:8080,10.166.32.245:8080 + 2 more...
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Я могу получить доступ к модулю на машине Kubernetes с помощью

curl http://10.110.245.152:8080
Hello Kubernetes!

Как разрешить доступ другим машинам в моей домашней сети? Когда я пробую это на других машинах, он просто зависает ...

curl http://10.110.245.152:8080

person phomlish    schedule 31.10.2020    source источник


Ответы (2)


Разве это не должно быть curl <kubernetes machine IP >:30140, если вы используете службу NodePort?

person confused genius    schedule 01.11.2020
comment
Ваше имя пользователя "запутанный гений" неверно. Я рекомендую «полезный гений», потому что ваш пост работает. Спасибо вам! - person phomlish; 01.11.2020

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

Настройка MetalLb может предоставить балансировщик нагрузки на чистом железе или тип службы LoadBalancer, который по умолчанию не предоставляется kubernetes. В приведенном выше примере используется тип «NodePort», и в конфигурации вашей службы вы должны иметь возможность заменить «NodePort» на тип «LoadBalancer». Если конфигурация правильная, kubectl get service example-service должен отображать оба адреса из внутренней сети kube и внешний IP-адрес из диапазона MetalLb, который вы настроили. Что-то вроде примера ниже:

kube-server:~$ kubectl get service keycloak-db -n keycloak-db 
NAME          TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
keycloak-db   LoadBalancer   10.109.91.158   192.168.1.243   8080:32434/TCP   33d

Еще я заметил в вашем примере, что диапазон адресов, назначенный в конфигурации MetalLb (192.168.100.0/24), не соответствует вашей домашней сети (10.11.0.0/16). Если у вас нет маршрутизации, было бы лучше зарезервировать некоторые IP-адреса в домашней сети и использовать их в MetalLb.

person mnikolic    schedule 01.11.2020
comment
Спасибо @mnikolic, я не знаком с Metallb. Прочитав ваше объяснение, я хочу попробовать его на своей установке без оборудования :). - person confused genius; 02.11.2020
comment
спасибо @mkikolic. Это отлично сработало. Я не смог найти инструкции по изменению пула в документации, но нашел кое-что здесь: github.com/metallb / metallb / issues / 308 - person phomlish; 03.11.2020