我在默认命名空间中运行一个集群,所有的pod都处于运行状态。
我有一个问题,我试图使用pod主机名'abcd-7988b76669-lgp8l'从一个pod连接到另一个pod,但我无法连接。为什么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连接到另一个使用主机名解析?
首先值得一提的是,通常情况下,你不会连接到单个的 Pods
使用他们的域名。 一个很好的原因是它们的短暂性。请注意,通常你不会创建普通的 Pods
但控制器如 部署 它管理着你的 Pods
并确保特定数量的 Pods
某种类型的域名不断地在运行。Pods
可能会经常被删除和重新创建,因此你永远不应该在你的应用程序中依赖他们的域名。通常情况下,您会将它们暴露在其他应用程序中,例如在其他应用程序中运行。Pods
通过 服务项目. 虽然使用个人 Pod
的域名是不推荐的,它仍然是可能的。你可以为了好玩或学习实验的目的而这样做。
正如 @David 已经提到的,如果你能编辑你的问题,并提供一些重要的细节,显示你已经尝试过的东西,如你的域名,你会帮助我们更多的为你提供一个全面的答案。Pods
和 Services
中的定义 yaml
格式。
从字面上回答你在标题中发布的问题。
minikube如何使用主机名从一个 pod 连接到另一个?
你将无法连接到一个 Pod
只用其 主机名. 你可以例如 ping 您的后台 Pods
透过 ClusterIP Service
通过简单地ping一下 <service-name>
(只要是在同一个 namespace
作为 Pod
你的ping从)。)
但是请记住 行不通 Pods
- 既不 Pods
名称及其主机名均可由集群DNS解析。.
你应该能够连接到一个个人 Pod
用其 全拼域名(FQDN) 只要你正确配置了一切。只要确保你没有忽略任何一个步骤,描述的 此处:
确保你已经创建了一个简单的 无头服务 貌似这样:
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
对号入座 Service
's selector
.
一旦一切配置妥当,你就可以连接到 Pod
忙盒1 和 ping
Pod
忙盒2 借助其 FQDN 像下面的例子一样。
$ 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
我希望这能帮助。