Каждый контейнер использует свое собственное пространство имен сети, поэтому для проверки сетевого подключения внутри пространства имен контейнера необходимо выполнить команду внутри этого пространства имен.
К счастью, все контейнеры в модуле используют одно и то же сетевое пространство имен, поэтому вы можете добавить небольшой контейнер с коляской для модуля, который печатает в журнале открытых соединений.
В качестве альтернативы вы можете запустить netstat
Команда внутри модуля (если модуль находится в его файловой системе):
kubectl get pods | grep Running | awk '{ print $1 }' | xargs -I % sh -c 'echo == Pod %; kubectl exec -ti % -- netstat -tunaple' >netstat.txt
# or
kubectl get pods | grep Running | awk '{ print $1 }' | xargs -I % sh -c 'echo == Pod %; kubectl exec -ti % -- netstat -tunaple | grep ESTABLISHED' >netstat.txt
После этого на вашем диске будет файл (netstat.txt
) со всей информацией о соединениях в модулях.
Третий путь наиболее сложен .Вам нужно найти идентификатор контейнера с помощью docker ps
и выполнить следующую команду, чтобы получить PID
$ pid = "$(docker inspect -f '{{.State.Pid}}' "container_name | Uuid")"
Затем вам нужно создать именованное пространство имен: (вы можете использовать любое имя, которое вы хотите, или container_name / Uuid/ Pod_Name как замена namespace_name)
sudo mkdir -p /var/run/netns
sudo ln -sf /proc/$pid/ns/net "/var/run/netns/namespace_name"
Теперь вы можете запускать команды в этом пространстве имен:
sudo ip netns exec "namespace_name" netstat -tunaple | grep ESTABLISHED
Это необходимо сделать для каждого модуля на каждом узле.Таким образом, это может быть полезно для устранения неполадок определенных контейнеров, но для вашей задачи требуется дополнительная автоматизация.
Для вас может быть полезно установить Istio в вашем кластере.В этом ответе
есть несколько интересных особенностей