我正在默认命名空间中运行群集,并且所有Pod都处于“运行”状态。
我有一个问题,我正在尝试使用Pod主机名'abcd-7988b76669-lgp8l'从一个Pod到另一个Pod进行telnet,但是我无法连接。尽管如果我使用pods内部IP,它会起作用。为什么dns无法解析?
我看着
kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6955765f44-5lpfd 1/1 Running 0 12h
coredns-6955765f44-9cvnb 1/1 Running 0 12h
任何人都知道如何使用主机名解析从一个Pod连接到另一个Pod吗?
答案 0 :(得分:1)
首先值得一提的是,通常您不会使用他们的域名连接到单个Pods
。一个好的原因是它们的短暂性质。请注意,通常您不是创建普通的Pods
,而是创建诸如Deployment之类的控制器来管理您的Pods
并确保特定种类的Pods
的特定数量不断增加,运行。 Pods
可能经常被删除和重新创建,因此您不应在应用程序中依赖它们的域名。通常,您会将它们公开给其他应用,例如通过Service在其他Pods
中运行。
尽管不建议使用单个Pod
的域名,但仍然可以使用。您可以出于娱乐或学习/实验目的进行操作。
如@David所述,如果您编辑问题并提供一些重要的详细信息,例如Pods
和{{ 1}}定义为Services
。
从字面上回答您在标题中发布的问题:
minikube如何使用主机名从一个Pod连接到另一个Pod?
您将无法仅使用其主机名连接到yaml
。您可以例如通过简单地ping Pod
(只要与Pods
位于相同的ClusterIP Service
中,即可 ping 通过<service-name>
暴露的后端namespace
您的ping来自)。
请记住,不适用于Pod
-集群DNS无法解析 Pods
名称或主机名。
如果您已正确配置所有内容,则应该能够使用其单独的完全限定域名(FQDN)连接到单个Pods
。只要确保您没有忽略here中所述的任何步骤:
请确保您已经创建了一个简单的Headless Service,看起来像这样:
Pod
确保您的apiVersion: v1
kind: Service
metadata:
name: default-subdomain
spec:
selector:
name: busybox
clusterIP: None
定义不缺少任何重要细节:
Pods
在谈到重要细节时,要特别注意您在apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
hostname: busybox-1
subdomain: default-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
---
apiVersion: v1
kind: Pod
metadata:
name: busybox2
labels:
name: busybox
spec:
hostname: busybox-2
subdomain: default-subdomain
containers:
- image: busybox:1.28
command:
- sleep
- "3600"
name: busybox
规范中正确定义了hostname
和subdomain
以及Pod
使用的labels
匹配Pods
的{{1}} 使用的标签。
正确配置所有内容后,您将可以使用Service
busybox1 和selector
Pod
busybox2 FQDN ,如下例所示:
ping
我希望这会有所帮助。