我有这个 Helm 图表,用于部署微服务。
https://github.com/rcbandit111/external_domain_helm_chart_poc/tree/main/pod-chart
多个微服务需要对该微服务进行内部 API 调用。如何为该 pod 设置内部 DNS 名称,以便其他 pod 可以通过唯一的自定义名称使用该名称?
答案1
这正是我们Services
的目的。
创建针对您的 pod 的服务资源并随意命名 - 只要它与域名兼容。
您可以通过 访问该 pod <servicename>.<namespace>.svc.cluster.local
。(请参阅k8s 文档)
对于集群外部流量,您需要Ingress
资源。
答案2
正如另一个答案所说,服务是前进的方向。
但是,当您询问有关 pod 的 DNS 记录时,请注意,这样的内容是开箱即用的:
kubectl get pod nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 8 (14m ago) 47d 10.1.3.220 docker-desktop <none> <none>
kubectl run client --image nginx -it --rm -- bash
curl -I 10-1-3-220.default.pod
HTTP/1.1 200 OK
...
curl -I 10-1-3-220.default.pod.cluster.local
HTTP/1.1 200 OK
...
default
是命名空间名称。
从技术上讲,可以创建指向给定 IP 地址的 pod 级 DNS 条目。该 IP 可以是例如另一个 pod 的 IP 地址:
cat client.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: client
name: client
spec:
hostAliases:
- hostnames: [nginx]
ip: 10.1.3.220
containers:
- image: nginx
name: client
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
kubectl apply -f client.yaml
kubectl exec client -it -- curl -I nginx
HTTP/1.1 200 OK
...
然而,如果使用新的 IP 地址等重新创建 pod,这显然无济于事。