ClusterIP: Службы доступны через pods / services в кластере.
Если я создаю службу myservice в пространстве имен по умолчанию типа: ClusterIP, то для службы будет создан следующий предсказуемый статический DNS-адрес:
myservice.default.svc.cluster.local (или просто myservice.default, или модулями в пространстве имен по умолчанию, просто "myservice" будет работать)
И это DNS-имя может быть разрешено только модулями и службами внутри кластера.
NodePort: Услуги доступны для клиентов в той же локальной сети / клиентах, которые могут пропинговать узлы хоста K8s (и pods / services в кластере) (Примечание. В целях безопасности ваши узлы хоста k8s должны находиться в частной подсети, поэтому клиенты в Интернете выиграли не сможет связаться с этим сервисом)
Если я создаю сервис mynodeportservice в пространстве имен mynamespace типа: NodePort в 3-узловом кластере Kubernetes. Затем будет создана служба типа: ClusterIP, и она будет доступна клиентам внутри кластера по следующему предсказуемому статическому DNS-адресу:
mynodeportservice.mynamespace.svc.cluster.local (или просто mynodeportservice.mynamespace)
Для каждого порта, который mynodeportservice прослушивает в порте узлов в диапазоне от 30000 до 32767, будет выбран случайным образом. Таким образом, внешние клиенты, находящиеся за пределами кластера, могут использовать эту службу ClusterIP, которая существует внутри кластера. Допустим, что наши 3 узла K8 имеют IP-адреса 10.10.10.1, 10.10.10.2, 10.10.10.3, служба Kubernetes прослушивает порт 80, а выбранный случайный порт был выбран 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. Идея состоит в том, что LB LB будет иметь публичный IP 1.2.3.4, и он будет загружать баланс и перенаправлять трафик к узлам хоста 3 K8, которые имеют частные 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 является частью службы балансировки нагрузки.
На той диаграмме, которую вы показали, клиент будет модулем внутри кластера.
externalIPs
меняется уравнение здесь? В частности, можно назначитьexternalIPs
массив дляClusterIP
Сервиса -типа, и тогда сервис станет доступен и по внешнему IP? Когда бы вы выбрали это через NodePort?