minikube如何使用主机名从一个Pod连接到另一个Pod?

时间:2020-04-22 12:50:24

标签: docker kubernetes minikube

我正在默认命名空间中运行群集,并且所有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吗?

1 个答案:

答案 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 规范中正确定义了hostnamesubdomain以及Pod使用的labels匹配Pods的{​​{1}} 使用的标签。

正确配置所有内容后,您将可以使用Service busybox1 selector Pod busybox2 FQDN ,如下例所示:

ping

我希望这会有所帮助。