为 Kubernetes 中的 pod 创建 DNS 记录以供内部使用

为 Kubernetes 中的 pod 创建 DNS 记录以供内部使用

我有这个 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,这显然无济于事。

相关内容