这些吊舱有一些主机名,即:
从Pod Drill-Staging-75cddd789-kbzsq中,我无法解析Drill-Staging-75cddd789-amsrj的主机名,反之亦然。解析自身Pod的名称有效。
我尝试设置各种dnsPolicies:
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
答案 0 :(得分:4)
通常是only Services get DNS names,而不是Pods。因此,默认情况下,您不能仅通过域名直接通过IP地址来引用另一个Pod。
仅在包括无头服务的某些条件下,豆荚才能获得DNS名称,例如explained in the documentation。具体来说,条件是:
hostname
字段subdomain
字段subdomain
字段在这种情况下,每个Pod都会获得以下格式的完全限定域名:
my-hostname.my-subdomain.default.svc.cluster.local
my-hostname
是Pod的hostname
字段,而my-subdomain
是Pod的subdomain
字段。
注意:DNS名称是为Pod的“主机名”而不是Pod的“名称”创建的。
您可以使用以下设置对此进行测试:
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
应用此选项后,您可以执行到其中一个Pod:
kubectl exec -ti my-pod-1 bash
您应该能够解析两个Pod的完全限定域名:
host my-hostname-1.my-subdomain.default.svc.cluster.local
host my-hostname-2.my-subdomain.default.svc.cluster.local
由于要从与目标Pod相同的名称空间发出请求,因此可以将域名缩写为:
host my-hostname-1.my-subdomain
host my-hostname-2.my-subdomain