ClusterIP: службы доступны для модулей / служб в кластере
Если я создаю службу с именем myservice в пространстве имен по умолчанию типа: ClusterIP, тогда будет создан следующий предсказуемый статический DNS-адрес для службы. :
myservice.default.svc.cluster.local (или просто myservice.default, или по модулям в пространстве имен по умолчанию будет работать только myservice)
И это DNS-имя может быть разрешено только модулями и службами внутри кластера.
NodePort: службы доступны для клиентов в той же локальной сети / клиентов, которые могут пинговать узлы хоста K8s (и модули / службы в кластере) (обратите внимание, что для безопасности ваши узлы хоста k8s должны находиться в частной подсети, поэтому клиенты Интернет не сможет получить доступ к этой службе)
Если я создам службу под названием mynodeportservice в пространстве имен mynamespace типа: NodePort в кластере Kubernetes с 3 узлами. Затем будет создана служба типа: ClusterIP, и она будет доступна клиентам внутри кластера по следующему предсказуемому статическому DNS-адресу:
mynodeportservice.mynamespace.svc.cluster.local (или просто mynodeportservice.mynamespace)
Для каждого порта, который mynodeportservice прослушивает на nodeport, будет случайным образом выбран диапазон от 30000 до 32767. Таким образом, внешние клиенты, находящиеся за пределами кластера, могут воздействовать на эту службу ClusterIP, которая существует внутри кластера. Допустим, у наших 3 узловых узлов K8s есть IP-адреса 10.10.10.1, 10.10.10.2, 10.10.10.3, служба Kubernetes прослушивает порт 80, а случайно выбранный Nodeport был 31852.
Клиент, который существует вне кластера могут посещать 10.10.10.1:31852, 10.10.10.2:31852 или 10.10.10.3:31852 (поскольку NodePort прослушивается каждым узлом хоста Kubernetes) Kubeproxy перенаправит запрос на порт 80 mynodeportservice.
LoadBalancer: сервисы доступны для всех, кто подключен к Интернету * (общая архитектура - L4 LB публично доступен в Интернете, помещая его в DMZ или предоставляя ему как частный, так и общедоступный IP-адрес, а узлы хоста k8s находятся на частном подсеть)
(Примечание. Это единственный тип сервиса, который не работает в 100% реализаций Kubernetes, например, в «голом железе» Kubernetes, он работает, когда Kubernetes имеет интеграцию с облачным провайдером.)
Если вы сделаете mylbservice, то будет создана виртуальная машина L4 LB (также будет неявно порождена IP-служба кластера и служба NodePort). На этот раз наш NodePort - 30222. Идея состоит в том, что L4 LB будет иметь общедоступный IP-адрес 1.2.3.4 и будет балансировать нагрузку и перенаправлять трафик на 3 хост-узла K8s, у которых есть частные IP-адреса. (10.10.10.1:30222, 10.10.10.2:30222, 10.10.10.3:30222), а затем Kube Proxy перенаправит его службе типа ClusterIP, которая существует внутри кластера.
Вы также спросили: использует ли тип службы NodePort по-прежнему ClusterIP? Да *
Или NodeIP действительно является IP-адресом, обнаруженным при запуске узлов kubectl get? Также да *
Давайте проведем параллель между Основами:
Контейнер находится внутри модуля. стручок находится внутри набора реплик. набор реплик находится внутри развертывания.
Аналогично:
Служба ClusterIP является частью службы NodePort. Служба NodePort является частью службы балансировки нагрузки.
На этой диаграмме, которую вы показали, клиент будет модулем внутри кластера.
person
neokyle
schedule
09.09.2018