Kubectl#
Сценарии эксплуатации кластера DropApp с помощью Kubectl#
Kubectl — это инструмент командной строки используемый в DropApp для управления кластерами. Kubectl осуществляет поиск файла config в директории $HOME/.kube. Возможно указание других файлов путем установления переменной окружения KUBECONFIG или флага --kubeconfig.
Примечание
В данном разделе рассматриваются примеры синтаксиса Kubectl, описаны командные операции и приведены распространенные сценарии.
Синтаксис#
Для выполнения команд Kubectl в терминале используйте следующий синтаксис:
kubectl [command] [TYPE] [NAME] [flags]
Где:
command- операция, выполняемая с одним или несколькими ресурсами, например,create,get,describe,delete;TYPE- тип ресурса. Типы ресурсов не чувствительны к регистру, кроме этого, возможно использовать единственную, множественную или сокращенную форму. Например, следующие команды приведут к одному результату:shell kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1NAME- имя ресурса. Имена чувствительны к регистру. Если имя не указано, то отображаются подробности по всем ресурсам.При выполнении операции с несколькими ресурсами можно выбрать каждый ресурс по типу и имени, либо сделать это в одном или нескольких файлов.
Выбор ресурсов по типу и имени позволяет:
группировать ресурсы, если все они одного типа:
TYPE1 name1 name2 name<#>. Например,kubectl get pod example-pod1 example-pod2;осуществить выбор нескольких типов ресурсов по отдельности. Например,
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>.
flags- флаг.
Для выбора ресурсов по типу и имени введите команду:
kubectl get pod/example-pod1 replicationcontroller/example-rc1
Для выбора ресурсов по одному или нескольким файлам введите команду:
-f file1 -f file2 -f file5
Используйте YAML в файлах конфигурации, введите команду:
kubectl get pod -f ./pod.yaml
Файл конфигурации flags: определяет дополнительные флаги. Используйте флаг -s или --server, чтобы указать адрес и порт API-сервера.
Внимание
Указанные флаги из командной строки переопределяют значения по умолчанию и связанные переменные окружения. При необходимости вызова справки выполните команду kubectl help.
Для применения YAML-файлов из указанного каталога в кластере DropApp используйте команду; она позволяет создавать, обновлять или удалять ресурсы в кластере в зависимости от содержимого этих файлов:
kubectl apply -f <directory>
Используйте селекторы меток для get и delete операций вместо конкретных имен объектов. Смотрите разделы, посвященные селекторам меток и эффективному использованию меток.
Для создания нового объекта Deployment в кластере DropApp используйте команду:
kubectl create deployment
Для создания сервиса в кластере DropApp используйте команду:
kubectl expose
Операции#
В таблице ниже приведены краткие описания и общий синтаксис всех операций Kubectl.
Операция |
Синтаксис операции |
Описание операции |
|---|---|---|
annotate |
|
Добавить или обновить аннотации одного или нескольких ресурсов |
api-versions |
|
Вывести доступные версии API |
apply |
|
Внести изменения в конфигурацию ресурса из файла или потока stdin |
attach |
|
Подключиться к запущенному контейнеру либо для просмотра потока вывода, либо для работы с контейнером (stdin) |
autoscale |
|
Автоматически промасштабировать набор pods, управляемых контроллером репликации |
cluster-info |
|
Показать информацию о Master node и сервисах в кластере DropApp |
config |
|
Изменить файлы kubeconfig. Подробные сведения смотрите в отдельных подкомандах |
create |
|
Создать один или несколько ресурсов из файла или stdin |
delete |
|
Удалить ресурсы из файла, потока stdin, либо с помощью селекторов меток, имен, селекторов ресурсов или ресурсов |
describe |
|
Показать подробное состояние одного или нескольких ресурсов |
diff |
|
Файл Diff или stdin в соответствии с текущей конфигурацией |
edit |
|
Отредактировать и обновить определение одного или нескольких ресурсов на сервере, используя редактор по умолчанию |
exec |
|
Выполнить команду в контейнере pod. |
explain |
|
Посмотреть документацию по ресурсам. Например, pods, nodes, сервисы и т.д. |
expose |
|
Создать DropApp-сервис из контроллера репликации, сервиса или pod |
get |
|
Вывести один или несколько ресурсов |
label |
|
Добавить или обновить метки для одного или нескольких ресурсов |
logs |
|
Вывести логи контейнера в pod |
patch |
|
Обновить один или несколько полей ресурса, используя стратегию слияния патча |
port-forward |
|
Переадресовать один или несколько локальных портов в pod |
proxy |
|
Запустить прокси для API DropApp |
replace |
|
Заменить ресурс из файла или потока stdin |
rolling-update |
|
Выполнить плавающее обновление, постепенно заменяя указанный контроллер репликации и его pods |
run |
|
Запустить указанный образ в кластере DropApp |
scale |
|
Обновить размер указанного контроллера репликации |
version |
|
Отобразить версию DropApp, запущенного на клиенте и сервере |
Типы ресурсов#
В таблице ниже перечислены все доступные типы ресурсов вместе с сокращенными аббревиатурами.
Имя ресурса |
Короткое имя |
Группа API |
Значение в namespace |
Вид ресурса |
|---|---|---|---|---|
bindings |
- |
- |
true |
Binding |
componentstatuses |
cs |
- |
false |
ComponentStatus |
configmaps |
cm |
- |
true |
ConfigMap |
endpoints |
ep |
- |
true |
Endpoints |
limitranges |
limits |
- |
true |
LimitRange |
namespaces |
ns |
- |
false |
Namespace |
nodes |
no |
- |
false |
Node |
persistentvolumeclaims |
pvc |
- |
true |
PersistentVolumeClaim |
persistentvolumes |
pv |
- |
false |
PersistentVolume |
pods |
po |
- |
true |
Pod |
podtemplates |
- |
- |
true |
PodTemplate |
replicationcontrollers |
rc |
- |
true |
ReplicationController |
resourcequotas |
quota |
- |
true |
ResourceQuota |
secrets |
- |
- |
true |
Secret |
serviceaccounts |
sa |
- |
true |
ServiceAccount |
services |
svc |
- |
true |
Service |
mutatingwebhookconfigurations |
- |
admissionregistration.k8s.io |
false |
MutatingWebhookConfiguration |
validatingwebhookconfigurations |
- |
admissionregistration.k8s.io |
false |
ValidatingWebhookConfiguration |
customresourcedefinitions |
crd, crds |
apiextensions.k8s.io |
false |
CustomResourceDefinition |
apiservices |
- |
apiregistration.k8s.io |
false |
APIService |
controllerrevisions |
- |
apps |
true |
ControllerRevision |
daemonsets |
ds |
apps |
true |
DaemonSet |
deployments |
deploy |
apps |
true |
Deployment |
replicasets |
rs |
apps |
true |
ReplicaSet |
statefulsets |
sts |
apps |
true |
StatefulSet |
tokenreviews |
- |
authentication.k8s.io |
false |
TokenReview |
localsubjectaccessreviews |
- |
authorization.k8s.io |
true |
LocalSubjectAccessReview |
selfsubjectaccessreviews |
- |
authorization.k8s.io |
false |
SelfSubjectAccessReview |
selfsubjectrulesreviews |
- |
authorization.k8s.io |
false |
SelfSubjectRulesReview |
subjectaccessreviews |
- |
authorization.k8s.io |
false |
SubjectAccessReview |
horizontalpodautoscalers |
hpa |
autoscaling |
true |
HorizontalPodAutoscaler |
cronjobs |
cj |
batch |
true |
CronJob |
jobs |
- |
batch |
true |
Job |
certificatesigningrequests |
csr |
certificates.k8s.io |
false |
CertificateSigningRequest |
leases |
- |
coordination.k8s.io |
true |
Lease |
events |
ev |
events.k8s.io |
true |
Event |
ingresses |
ing |
extensions |
true |
Ingress |
networkpolicies |
netpol |
networking.k8s.io |
true |
NetworkPolicy |
poddisruptionbudgets |
pdb |
policy |
true |
PodDisruptionBudget |
podsecuritypolicies |
psp |
policy |
false |
PodSecurityPolicy |
clusterrolebindings |
- |
rbac.authorization.k8s.io |
false |
ClusterRoleBinding |
clusterroles |
- |
rbac.authorization.k8s.io |
false |
ClusterRole |
rolebindings |
- |
rbac.authorization.k8s.io |
true |
Role |
roles |
- |
rbac.authorization.k8s.io |
true |
Role |
priorityclasses |
pc |
scheduling.k8s.io |
false |
PriorityClass |
csidrivers |
- |
storage.k8s.io |
false |
CSIDriver |
csinodes |
- |
storage.k8s.io |
false |
CSINode |
storageclasses |
sc |
storage.k8s.io |
false |
StorageClass |
volumeattachments |
- |
storage.k8s.io |
false |
VolumeAttachment |
Опции вывода#
В следующих разделах рассматривается форматирование и сортировка вывода определенных команд.
Форматирование вывода#
Стандартный формат вывода всех команд Kubectl представлен в понятном для человека текстовом формате. Чтобы вывести подробности в определенном формате можно добавить флаги -o или --output к команде kubectl.
Синтаксис команд#
Команды должны иметь следующую форму:
kubectl [command] [TYPE] [NAME] -o <output_format>
В зависимости от операции, в Kubectl поддерживаются форматы вывода, представленные в таблице ниже.
Выходной формат |
Описание |
|---|---|
|
Вывод таблицы с использованием списка пользовательских столбцов, разделенного запятыми |
|
Вывод таблицы с использованием шаблона с пользовательскими столбцами в файле |
|
Вывод API-объекта в формате JSON |
|
Вывод поля, определенного в выражении jsonpath |
|
Вывод полей, определенных в выражении jsonpath из файла |
|
Вывод только имени ресурса |
|
Вывод в текстовом формате с дополнительной информацией. Для pods отображается имя node |
|
Вывод API-объекта в формате YAML |
Пример формата вывода представлен следующей командой, которая выводит подробную информацию по указанному pod в виде объекта в YAML-формате:
kubectl get pod web-pod-13je7 -o yaml
Пользовательские столбцы#
Для определения пользовательских столбцов и вывода в таблицу только нужных данных, можно использовать опцию custom-columns. Возможно так же определить пользовательские столбцы в самой опции, либо сделать это в файле шаблона: -o custom-columns=<spec> или -o custom-columns-file=<filename>.
Опциональные примеры команд#
Столбцы указаны в самой команде:
kubectl get pods <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersionСтолбцы указаны в файле шаблона:
kubectl get pods <pod-name> -o custom-columns-file=template.txtГде файл template.txt содержит следующий вывод:
NAME RSRC metadata.name metadata.resourceVersionРезультат выполнения любой из показанной выше команды представлен ниже:
NAME RSRC submit-queue 610995
Получение вывода с сервера#
Kubectl может получать информацию об объектах с сервера. Это означает, что для любого обозначенного объекта сервер вернет столбцы и строки. Благодаря тому, что сервер изолирует реализацию вывода – гарантируется единообразный и понятный для человека вывод на всех машинах, использующих один и тот же кластер DropApp.
Эта функциональность включена по умолчанию. Чтобы отключить ее, необходимо добавить флаг --server-print=false в команду kubectl get.
Пример вывода информации о состоянии pod с использованием команды kubectl get:
kubectl get pods <pod-name> --server-print=false
Вывод будет выглядеть следующим образом:
NAME READY STATUS RESTARTS AGE
pod-name 1/1 Running 0 1m
Сортировка списка объектов#
Для вывода объектов в виде отсортированного списка в терминал используется флаг --sort-by к команде kubectl. Для сортировки объектов нужно указать любое числовое или строковое поле в флаге --sort-by. Для определения поля следует использовать выражение jsonpath.
Синтаксис команды будет выглядеть следующим образом:
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
Чтобы вывести список pods, отсортированных по имени, необходимо выполнить команду:
kubectl get pods --sort-by=.metadata.name
Распространенные сценарии использования Kubectl#
В разделе приведены наиболее распространенные сценарии использования операций Kubectl: kubectl apply. Эта команда необходима для внесения изменения или обновления ресурса из файла/потока stdin.
Чтобы использовать Kubectl:
Создайте сервис из определения в example-service.yaml:
kubectl apply -f example-service.yamlСоздайте контроллер репликации из определения в example-controller.yaml:
kubectl apply -f example-controller.yamlСоздайте объекты, которые определены в файлах с расширением .yaml, .yml или .json в директории directory.
kubectl apply -f <directory>Выведите один или несколько ресурсов и все pods в текстовом формате:
kubectl get pods -AПроверить все pods в определенном namespace.
kubecti get pods -n [namespace]Выведите все pods в текстовом формате вывода и включите дополнительную информацию (например, имя node).
kubectl get pods -o wideВыведите контроллер репликации с указанным именем в текстовом формате вывода:
kubectl get replicationcontroller <rc-name>Выведите все контроллеры репликации и сервисы вместе в текстовом формате вывода:
kubectl get rc,servicesВыведите все наборы демонов в текстовом формате вывода:
kubectl get dsВыведите все pods, запущенные на node server01:
kubectl get pods --field-selector=spec.nodeName=server01Посмотрите подробное состояние одного или нескольких ресурсов. Обратите внимание, что по умолчанию также включаются неинициализированные ресурсы. Например, описать состояние pod в namespace
cube system.kubectl describe pod <pod-name> -n kube-systemПосмотрите информацию об node с именем
<node-name>.:kubectl describe nodes <node-name>Посмотрите подробности pod
<pod-name>:kubectl describe <pod-name>Посмотрите подробности всех pods, управляемых контроллером репликации
<rc-name>.Примечание
Любые pods, созданные контроллером репликации, имеют префикс с именем контроллера репликации:
kubectl describe pods
Посмотрите подробности по всем pods:
kubectl describe podsПримечание
Команда
kubectl getиспользуется для получения одного или нескольких ресурсов одного и того же типа. Она поддерживает большой набор флагов, с помощью которых можно настроить формат вывода, например, с помощью флага-oили--output.Чтобы отслеживать изменения в конкретном объекте, необходимо указать флаг
-wили--watch. Командаkubectl describeфокусируется на описании взаимосвязанных аспектов указанного ресурса. При генерации вывода для пользователя она может обращаться к API-серверу. Например, командаkubectl describe nodeвыдает не только информацию об node, но и краткий обзор запущенных на нем pods, генерируемых событий и т.д.Удалите ресурсы из файла потока
stdinпри помощи селекторов меток, селекторов ресурсов или имен ресурсов:kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])Примеры:
# Удалить pod, используя тип и имя, указанные в pod.json. kubectl delete -f ./pod.json # Удалить pod на основе типа и имени в JSON, переданном в stdin. cat pod.json | kubectl delete -f - # Удалить pod и сервисы с одинаковыми названиями "baz" и "foo" kubectl delete pod,service baz foo # Удалить pod и сервисы с именем метки=myLabel. kubectl delete pods,services -l name=myLabel # Удалить pod с UID 1234-56-7890-234-456. kubectl delete pod 1234-56-7890-234234-456456 # Удалить все pods kubectl delete pods --allУдалите pod по типу и имени, которые указаны в файле pod.yam:
kubectl delete -f pod.yamlУдалите все pods и сервисы с именем метки
<label-name>:kubectl delete pods,services -all name=<label-name>Удалите все pods, включая неинициализированные:
kubectl delete pods --allПолучите вывод от запущенной команды
dateв pod<pod-name>. По умолчанию отобразится следующий вывод из первого контейнера:kubectl exec <pod-name> dateПолучите вывод из запущенной команды
dateв контейнере<container-name>для pod<pod-name>:kubectl exec <pod-name> -c <container-name> dateЗапустите интерактивный терминал
(TTY)и/bin/bashв pod<pod-name>. По умолчанию отобразится следующий вывод из первого контейнера:kubectl exec -ti <pod-name> /bin/bashВыведите логи контейнера в pod:
kubectl logsВыведите текущие логи в pod, как представлено ниже при помощи команды
<pod-name>:kubectl logs <pod-name>Выведите логи в pod
<pod-name>в режиме реального времени. Это похоже на команду „tail -f“ Linux.kubectl logs -f <pod-name>
Управление рабочей нагрузкой посредством Kubectl#
Создание нового namespace#
Для создания нового namespace используйте команду:
kubectl create namespace <test>Для создания/редактирования ресурсов используйте команду:
kubectl edit / kubectl patchДля удаления ресурсов используйте команду:
kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])Пример создания нового namespace с названием myapp:
kubectl create namespace myappВ результате будет получен вывод:
~# kubectl create namespace myapp namespace/myapp created ~#Убедитесь, что новое namespace отображается, при помощи команды:
kubectl get namespaceВ результате будет получен вывод:
~# kubectl get ns NAME STATUS AGE default Active 71m kube-system Active 71m kube-public Active 71m kube-node-lease Active 71m myapp Active 49s ~#
Запуск рабочей нагрузки Kubectl#
Сценарий возможно осуществить с помощью команды Kubectl create. Для изменения и создания объектов, используйте команды Kubectl, которые берут на вход описание объектов:
kubectl create -f {файл с описанием объекта} для создания объектов;
kubectl apply -f {файл с описанием объекта} для обновления объектов;
kubectl delete -f {файл с описанием объекта} для удаления объекта.
Примечание
Написание объекта может быть в различных форматах - json, yaml и т.д.
На основе текущего namespace и по стандартным для объекта полям - apiVersion, kind, metadata.name, Kubectl находит соответствующий ресурс в API и совершает запросы к API Server. Для этого:
Воспользуйтесь описанием ресурса в файле { }.json и создайте объект pod с помощью следующей команды:
kubectl create -f hello-service.jsonЗапрос сделанный Kubectl в API Server, будет идентичен запросу в сценарий запуска нагрузки.
После этого шага запросите статус объекта pod:
kubectl get pod hello-demoВ результате будет получен вывод:
~# kubectl get pod hello-demo NAME READY STATUS RESTARTS AGE hello-demo 1/1 Running 0 4m34s ~#При необходимости удалите ресурс, отвечающий за рабочую нагрузку с помощью команды:
kubectl delete -f hello-service.jsonВ результате будет получен вывод:
~# kubectl delete -f hello-service.json pod "hello-demo" deleted ~#
Сетевые политики (Network Policies)#
Если необходимо управлять потоком трафика на уровне IP-адреса или порта (уровень OSI 3 или 4), то можно рассмотреть возможность использования NetworkPolicies для конкретных приложений в кластере DropApp. Сетевые политики – это конструкция, ориентированная на приложения, которая позволяет указать, как pod разрешено взаимодействовать с различными сетевыми «объектами» (термин «объект» используется здесь, чтобы избежать перегрузки более распространенных терминов, таких как «конечные точки» и «службы», которые имеют специфические коннотации DropApp) по сети. Сетевые политики применяются к соединению с pods на одном или обоих концах и не имеют отношения к другим подключениям.
Объекты, с которыми pod может взаимодействовать, идентифицируются с помощью комбинации следующих 3 идентификаторов:
других pods, которые разрешены (исключение: pod не может заблокировать доступ к себе);
разрешенные namespaces;
IP-блоки (исключение составляет трафик к node, на котором запущен pod. С этого node трафик всегда разрешен, независимо от IP-адреса pod или самого node).
При определении сетевой политики на основе pod или namespace используйте селектор, чтобы указать, какой трафик разрешен для и из pod, которые соответствуют селектору. Когда создаются сетевые политики на основе IP, пользователи определяют политики на основе блоков IP (диапазонов CIDR).
Предварительные требования#
Сетевые политики реализуются с помощью сетевого плагина. Чтобы использовать сетевые политики, необходимо использовать сетевое решение, поддерживающее NetworkPolicy. Создание ресурса NetworkPolicy без контроллера, который его реализует, не будет иметь эффекта.
Два вида изоляции pod#
Существует два вида изоляции для pod: изоляция для «Egress» и изоляция для «Ingress». Они касаются того, какие соединения могут быть установлены. «Изоляция» здесь не является абсолютной, скорее это означает «применяются некоторые ограничения». Альтернатива «неизолированный для $direction» означает, что в указанном направлении не применяются никакие ограничения. Два вида изоляции (или более, чем два вида) объявляются независимо, и оба имеют отношение к соединению от одного pod к другому.
По умолчанию pod не изолирован для выхода: разрешены все исходящие подключения. Pod изолирован для выхода, если существует какая-либо сетевая политика, которая одновременно выбирает pod и имеет «Egress» в своем policyTypes. Когда pod изолирован для выхода, единственными разрешенными подключениями из pod являются те, которые разрешены Egress списком сетевой политики и применяются к pod.
По умолчанию pod не изолирован для входа: разрешены все входящие подключения. Pod изолирован для входа, если существует какая-либо сетевая политика, которая одновременно выбирает pod и имеет «Ingress» в policyTypes: такая политика применяется к pod для входа. Когда pod изолирован для входа, единственными разрешенными подключениями к pod являются соединения с node pod и те, которые разрешены Ingress списком сетевой политики и применяются к pod для входа.
Сетевые политики не конфликтуют: они дополняют друг друга. Если какая-либо политика или положения применяются к данному pod для данного направления, соединения, разрешенные в этом направлении из этого pod, являются объединением того, что разрешено применимыми политиками. Таким образом, порядок оценки не влияет на результат политики.
Для того чтобы соединение из pod источника в pod назначения было разрешено, необходимо разрешить подключение как политикой «Ingress» в pod источника, так и политикой «Egress» в pod назначения. Если какая-либо из сторон не разрешает подключение, этого не произойдет.
Ресурс сетевой политики#
Пример сетевой политики может выглядеть следующим образом:
service/networking/networkpolicy.yaml Скопируйте сервис / сеть/networkpolicy.yaml в буфер обмена
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/24
ports:
- protocol: TCP
port: 5978
Примечание
Подключение политики выхода в pod источника и политики входа в pod на сервере API для кластера DropApp на сервере API для кластера DropApp не будет иметь никакого эффекта, если выбранная сеть поддерживает сетевую политику.
Обязательные поля (Mandatory Fields): как и во всех других конфигурациях DropApp, для сетевой политики необходимы поля apiVersion, kind и metadata.
Спецификация (spec): спецификация NetworkPolicy содержит всю информацию, необходимую для определения конкретной сетевой политики в данном namespace.
Pod-cелектор (podSelector): каждая сетевая политика включает в себя podSelector, выбирающий группировку pods, к которым применяется политика. В примере политики выбираются pods с меткой role=db. Пустое значение podSelector выбирает все pods в namespace.
Типы политик (policyTypes): каждая сетевая политика включает в себя policyTypes список, который может включать в себя ingress, egress или сразу оба типа. Поле policyTypes указывает, применяется ли данная политика к входящему трафику в выбранный pod, исходящему трафику из выбранных pods или к обоим типам. Если в сетевой политике указано не policyTypes, то по умолчанию всегда будет установлено ingress, а egress установится, если сетевая политика имеет какие-либо правила выхода.
Вход (ingress): каждая сетевая политика может включать список разрешенных ingress правил. Каждое правило разрешает трафик, соответствующий разделам from и ports. Пример политики (представлен выше) содержит единственное правило, которое сопоставляет трафик на одном порту с одним из трех источников, первый из них указан через ipBlock, второй через namespaceSelector, а третий через podSelector.
Выход (egress): каждая сетевая политика может содержать список разрешенных egress правил. Каждое правило разрешает трафик, соответствующий разделам to и ports. Пример политики (представлен выше) содержит единственное правило, которое сопоставляет трафик по одному порту в любой выбранной подсети (в примере 0.0.0.0/24).
Ниже представлен пример сценария NetworkPolicy:
Изолируйте role=db pods в default namespace как для входящего, так и для исходящего трафика (если они еще не были изолированы).
Используйте правила входа для разрешения подключения ко всем pods в default namespace с меткой role=db на TCP-порту 6379 из:
любого pod в default пnamespace с меткой
role=frontend;любого pod в namespace с меткой
project=myproject;IP–адреса в диапазонах
172.17.0.0–172.17.0.255и172.17.2.0-172.17.255.255(т.е. все из них,172.17.0.0/16кроме172.17.1.0/24).
Используйте правила выхода для разрешения подключения из любого pod в default namespace с меткой role=db к CIDR
0.0.0.0/24на TCP-порту 5978.