для deamonSet мне нужно знать внешний IP-адрес узла, на котором работает модуль/контейнер, как ENV, поскольку требуется отправить его в дейтаграмме. Унфо. содержит ли status.hostIP только локальный IP-адрес узла.
Заранее спасибо.
Если вам разрешен доступ к Службе метаданных (она может быть скрыта с помощью GKE), вы можете получить доступ к внешнему IP-адресу виртуальной машины: curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip (или к какой-либо его перестановке).

Если существуют внешние IP-адреса , которые направляются к одному или нескольким узлам кластера, службы Kubernetes могут быть доступны по этим внешним IP-адресам. Трафик, поступающий в кластер с внешним IP-адресом (в качестве IP-адреса назначения) через порт службы, будет перенаправляться на одну из конечных точек службы. внешние IP-адреса не управляются Kubernetes и за них отвечает администратор кластера.
Для приложения, если вы захотите предоставить Службу на внешний IP-адрес, доступный за пределами вашего кластера. Типы служб Kubernetes позволяют вам указать, какой тип службы вам нужен. Вы можете использовать тип Nodeport или тип Load Balancer или другие типы, чтобы предоставить доступ к вашему сервису.
В конце концов я написал небольшой скрипт на Python, который позволил мне подключить эту информацию к внешнему DNS-серверу...
import os
from kubernetes import client, config, watch
# Configure Kubernetes API client
try:
config.load_kube_config() # Use kubeconfig file if available
except Exception:
config.load_incluster_config() # Use in-cluster config if running inside a cluster
def get_public_ip(node):
for address in node.status.addresses:
if address.type == 'ExternalIP':
return address.address
return None
def get_all_nodes():
return v1.list_node().items
В средах, в которых я работал, лучшая практика заключалась в том, что узлы находились в частной среде и были доступны только через такие вещи, как службы типа LoadBalancer; узел обычно не имеет внешнего IP-адреса.