Назад | Перейти на главную страницу

Kubernetes: связь между IP-адресами службы и IP-адресами модуля

Я пытаюсь понять немного больше о сетях Kubernetes. Вот почему я развернул кластер в облаке Google и проверил сеть: кластеры контейнеров gcloud описывают cluster0 | grep -i cidr

clusterIpv4Cidr: 10.20.0.0/14        # --cluster-cidr
nodeIpv4CidrSize: 24
servicesIpv4Cidr: 10.23.240.0/20     # --service-cluster-ip-range

Итак, первый - для IP-адресов подов:

First IP: 10.20.0.1
Last IP: 10.23.255.254

обслуживание

First IP: 10.23.240.1
First IP: 10.23.255.254

Всегда ли так, что диапазон pod содержит диапазон IP-адресов службы? Используют ли они один и тот же сетевой уровень?

Это долгая история, как Сеть Kubernetes сделан...

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

Kubernetes использует как частные, так и общедоступные IP-адреса. Публичные IP-адреса на данный момент не упоминаются.

Kubernetes использует частный пул адресов для обеспечения связи внутри кластера. У каждого модуля и сервиса есть частный IP-адрес. Сервисы в Kubernetes виртуальные - они создаются NAT, а iptables создает перенаправление портов от адресуемой службы к подам.

Основные правила общения внутри кластера:

  • все контейнеры могут взаимодействовать со всеми другими контейнерами без NAT
  • все узлы могут связываться со всеми контейнерами (и наоборот) без NAT. IP-адрес, который контейнер видит в себе, - это тот же IP-адрес, который другие видят в нем.

По поводу вашего вопроса: официальный Сеть Kubernetes в документации указано:

--service-cluster-ip-range ipNet -  A CIDR notation IP range from which to assign service cluster IPs. This must not overlap with any IP ranges assigned to nodes for pods.

Таким образом, не рекомендуется иметь IP-адрес службы в том же диапазоне, который используется модулями.

Очень рекомендую посмотреть видео о сети Kubernetes или глядя на иллюстрированное руководство.

clusterIpv4Cidr: 10.20.0.0/14        # IP subnet which is configured on all pods.
nodeIpv4CidrSize: 24                 # CidrSize which is configured on each node
servicesIpv4Cidr: 10.23.240.0/20     # IP subnet which is configured for Services

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

Итак, я просто предполагаю, что в приведенном ниже предупреждении говорится, что service-cluster-ip-range не должен использоваться для подов, но это нормально, что они перекрываются с диапазоном clusterIPv4Cider. Это предназначено.

«Это не должно пересекаться ни с какими диапазонами IP-адресов, назначенными узлам для модулей».