Как разрешить имена хостов подов из других подов?
- У меня 2 модуля работают на 2 узлах, каждый модуль работает на разных узлах.
- Эти узлы находятся в одной подсети и сами могут использовать TCP/UDP/ICMP.
У этих подов есть несколько имен хостов, например:
- буровая установка-75cddd789-kbzsq
- буровая установка-75cddd789-amsrj
Из pod Drill-staging-75cddd789-kbzsq я не могу разрешить имя хоста для Drill-staging-75cddd789-amsrj и наоборот. Устранение имени модуля собственной личности работает.
Я пробовал устанавливать различные dnsPolicies:
- ClusterFirst: не повезло
- По умолчанию: не повезло
- ClusterFirstWithHostNet: не повезло, и это событие не могло разрешить имя хоста своего собственного узла
- Нет: не пробовал (не думаю, что это хороший способ)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "app.name" . }}
namespace: {{ .Values.global.namespace }}
spec:
replicas: 2
selector:
matchLabels:
app: {{ include "app.name" . }}
template:
metadata:
labels:
app: {{ include "app.name" . }}
spec:
containers:
- name: {{ include "app.name" . }}
image: ...
resources:
...
ports:
...
imagePullPolicy: Always
restartPolicy: Always
1 ответ
Обычно DNS-имена получают только службы, а не модули. Таким образом, по умолчанию вы не можете ссылаться на другой Pod напрямую по имени домена, только по его IP-адресу.
Поды получают DNS-имена только при определенных условиях, которые включают безголовый сервис, как описано в документации. В частности, условия таковы:
- У стручков есть
hostname
поле - У стручков есть
subdomain
поле - Существует безголовый сервис (в том же пространстве имен), который выбирает поды
- Название безголовой службы равно
subdomain
поле стручков
В этом случае каждый Pod получает полное доменное имя в следующей форме:
my-hostname.my-subdomain.default.svc.cluster.local
где my-hostname
это hostname
поле стручка и my-subdomain
это subdomain
поле Под.
Примечание. DNS-имя создается для "имени хоста" модуля, а не для "имени" модуля.
Вы можете проверить это с помощью следующей настройки:
apiVersion: v1
kind: Service
metadata:
name: my-subdomain
spec:
selector:
name: my-test
clusterIP: None
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod-1
labels:
name: my-test
spec:
hostname: my-hostname-1
subdomain: my-subdomain
containers:
- image: weibeld/ubuntu-networking
command: [sleep, "3600"]
name: ubuntu-networking
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod-2
labels:
name: my-test
spec:
hostname: my-hostname-2
subdomain: my-subdomain
containers:
- image: weibeld/ubuntu-networking
command: [sleep, "3600"]
name: ubuntu-networking
После применения этого вы можете запустить один из модулей:
kubectl exec -ti my-pod-1 bash
И вы должны иметь возможность разрешать полные доменные имена двух подов:
host my-hostname-1.my-subdomain.default.svc.cluster.local
host my-hostname-2.my-subdomain.default.svc.cluster.local
Поскольку вы делаете запросы из того же пространства имен, что и целевые модули, вы можете сократить имя домена до:
host my-hostname-1.my-subdomain
host my-hostname-2.my-subdomain