У меня есть установка kubernetes, которая работает нормально, но я не могу предоставлять внешние службы . Я думаю, моя сеть настроена неправильно:
адреса служб Kubernetes: - service-cluster-ip-range = 172.16.0.1 / 16
конфигурация фланелевой сети: etcdctl get / test.lan / network / config {"Сеть": "172.17.0.0/16" }
настройка подсети докера: - bip = 10.0.0.1 / 24
IP-адрес узла: 192.168.4.57
У меня запущена служба nginx, и я попытался открыть это так:
[root@kubemaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-px6uy 1/1 Running 0 4m
[root@kubemaster ~]# kubectl get services
NAME LABELS SELECTOR IP(S) PORT(S) AGE
kubernetes component=apiserver,provider=kubernetes <none> 172.16.0.1 443/TCP 31m
nginx run=nginx run=nginx 172.16.84.166 9000/TCP 3m
, а затем я открыл службу следующим образом:
kubectl expose rc nginx --port=9000 --target-port=9000 --type=NodePort
NAME LABELS SELECTOR IP(S) PORT(S) AGE
nginx run=nginx run=nginx 9000/TCP 292y
Я ожидаю, что теперь я смогу добраться до контейнера nginx на IP-адресе hostnodes ( 192.168.4.57
) - иметь Я неправильно понял сеть? Если да, то можно получить объяснение: (
Примечание: это на физическом оборудовании без балансировщика нагрузки, предоставляемого облачным провайдером, поэтому, я думаю, NodePort - единственный вариант, который у меня есть?
Я ожидаю, что теперь смогу добраться до контейнера nginx на IP-адресе hostnodes (192.168.4.57) - я неправильно понял сеть? Если у меня есть, можно получить объяснение: (
Ожидайте прочитать модуль на hostIP: NodePort, где вы можете найти порт узла службы с помощью:
kubectl get svc echoheaders --template '{{range .spec.ports}} {{. nodePort}} {{end}} '
Примечание. Это на физическом оборудовании без балансировщика нагрузки, предоставляемого облачным провайдером, поэтому, я думаю, NodePort - единственный вариант, который у меня есть? ] Вы можете развернуть контроллер входящего трафика, например: https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx или https://github.com/kubernetes/contrib/tree/master/service-loadbalancer
Служба NodePort является наиболее распространенным решением для небольшого / локального кластера без операционной системы, и один и тот же порт будет доступен на всех узлах, на которых выполняются ваши задания (т.е., вероятно, не ваш главный , но рабочие узлы), на которых запущен kube-proxy
.
Есть некоторый contrib / неочевидный код , который действует как LoadBalancer для небольших сетей, так что если вы хотите используйте type: LoadBalancer как локально, так и в облаке, вы можете получить примерно эквивалентную механику, если это важно.
Контроллеры Ingress становятся значительно более полезными по сравнению с NodePorts, когда вы хотите смешивать и сопоставлять сервисы (особенно HTTP-сервисы), предоставляемые вашим кластером на порт 80 или 443, и созданы специально для поддержки нескольких служб через одну конечную точку (и, возможно, один порт - сопоставлен с отдельными путями URI и т.п.). Контроллеры Ingress не так сильно помогают, когда доступ, который вам нужен, не основан на HTTP (например, служба на основе сокетов, такая как Redis или MongoDB, или, возможно, что-то особенное, что вы делаете)
Если вы интегрируете это в внутренний ИТ-проект, то многие коммерческие балансировщики нагрузки рекомендуют использовать конфигурации NodePort с их собственной технологией балансировки нагрузки и ссылаться на пул всех рабочих узлов в этой настройке. У F5 есть разумный пример этого в своей документации.
Вам не нужно использовать NodePort, и вам не нужно использовать внешний балансировщик нагрузки. Просто выделите некоторые из узлов вашего кластера в качестве узлов балансировки нагрузки. Вы помещаете их в другую группу узлов, присваиваете им несколько меток: mynodelabel / ingress: nginx
, а затем размещаете в этой группе узлов демон входящего потока nginx.
Наиболее важные параметры:
spec:
restartPolicy: Always
dnsPolicy: ClusterFirst
hostNetwork: true
nodeSelector:
mynodelabel/ingress: nginx
и
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
При желании вы можете испортить свои узлы балансировщика нагрузки, чтобы обычные модули не работали с ними и замедляли работу nginx.