首页 > 解决方案 > minikube 如何使用主机名从一个 Pod 连接到另一个 Pod?

问题描述

我在默认命名空间中运行一个集群,所有 pod 都处于运行状态。

我有一个问题,我正在尝试使用 pod 主机名“abcd-7988b76669-lgp8l”从一个 pod 远程登录到另一个 pod,但我无法连接。虽然如果我使用 pod 内部 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 吗?

标签: dockerkubernetesminikube

解决方案


首先值得一提的是,通常您不会Pods使用他们的域名连接到个人。一个很好的理由是它们的短暂性。请注意,通常您不会创建普通Pods但控制器,例如Deployment,它管理您Pods并确保特定数量的Pods特定类型不断启动和运行。Pods可能经常被删除和重新创建,因此您永远不应该在您的应用程序中依赖它们的域名。通常,您会将它们暴露给其他应用程序,例如Pods通过Service在其他应用程序中运行。 虽然使用个人Pod的域名不推荐,还是可以的。您可以仅出于娱乐或学习/实验目的而这样做。

正如@David 已经提到的那样,如果您编辑您的问题并提供一些重要的细节,展示您已经尝试过的内容,例如您的Pods和格式的Services定义,您将更多地帮助我们为您提供全面的答案。yaml

从字面上回答标题中发布的问题:

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

您将无法仅Pod使用其hostname连接到它。例如,您可以通过简单地ping 来ping暴露Pods的后端(只要它与您的ping 相同)。ClusterIP Service<service-name>namespacePod

但是请记住,它不起作用Pods-Pods名称和它们的主机名都不能被集群 DNS 解析

如果您已正确配置所有内容,您应该能够Pod使用其完全限定域名 (FQDN)连接到个人。只要确保您没有忽略此处描述的任何步骤:

确保你已经创建了一个简单的Headless Service,它看起来像这样

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

谈到重要细节,请特别注意您正确定义hostnamesubdomainPod规范中labels使用的内容与'sPods使用的标签相匹配Serviceselector

正确配置所有内容后,您将能够使用其FQDN附加到Pod busybox1ping Pod busybox2 ,如下例所示:

$ kubectl exec -ti busybox1 -- /bin/sh
/ # ping busybox-2.default-subdomain.default.svc.cluster.local
PING busybox-2.default-subdomain.default.svc.cluster.local (10.16.0.109): 56 data bytes
64 bytes from 10.16.0.109: seq=0 ttl=64 time=0.051 ms
64 bytes from 10.16.0.109: seq=1 ttl=64 time=0.082 ms
64 bytes from 10.16.0.109: seq=2 ttl=64 time=0.081 ms

我希望这有帮助。


推荐阅读