我的理解是,我可以通过从Pod内部发送带有服务的完全限定域名(FQDN)的HTTP请求来与特定Pod中的其他Pod进行通信。 该系统使用minikube在本地运行。
服务的YML-
apiVersion: v1
kind: Service
metadata:
name: kubia
spec:
sessionAffinity: ClientIP
ports:
- port: 80
targetPort: 8080
selector:
app: kubia
服务描述-
Name: kubia
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=kubia
Type: ClusterIP
IP: 10.111.178.111
Port: <unset> 80/TCP
TargetPort: 8080/TCP
Endpoints: 172.17.0.7:8080,172.17.0.8:8080,172.17.0.9:8080
Session Affinity: ClientIP
Events: <none>
我正在尝试使用-
kubectl exec -it kubia-gqd5l bash
其中kubia-gqd5l是pod。 在bash中,我尝试通过-
发送请求curl http://kubia
其中kubia是服务的名称。 我有错误-
卷曲:(6)无法解析主机:kubia。
请注意,我设法通过-
与服务进行通信 kubectl exec kubia-gqd5l -- curl -s http://10.111.178.111
有什么主意吗?
答案 0 :(得分:1)
Kubernetes群集通常已部署DNS。这样就可以通过使用相应的Kubernetes服务的名称在集群内( )内进行Pod到Pod的通信。参见https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
您的Kubernetes集群/ minikube是否正在运行DNS?
要检查的是服务定义中的选择器-确保窗格/部署具有选择器中指定的app: kubia
标签。
否则,按照上面链接中的文档,由于该服务的查找来自同一名称空间中的Pod,因此不需要将该名称空间与服务名称一起使用:(quote)“。在Kubernetes命名空间栏中假设一个名为foo的服务。在命名空间中运行的Pod可以通过对foo进行DNS查询来查找此服务。在命名空间quux中运行的Pod可以通过对DNS进行查询来查找此服务foo.bar”。
答案 1 :(得分:0)
看看这个答案2 Kubernetes pod communicating without knowing the exposed address,以服务为目标,最好在服务中添加名称空间。