我正在本地计算机minikube集群中尝试一种可能的kubernetes方案。它是使用ExternalName服务从一个集群访问另一个集群中通过入口公开的内部服务。我知道使用入口可以在集群中访问该服务。当我使用minikube在本地尝试此方案时,我无法使用同时运行的集群。因为我只是想验证是否可以使用ExternName服务访问入口公开的服务。
我使用minikube tunnel
启动minikube隧道。
我可以使用http://k8s-yaml-hello.info
访问该服务。
但是,当我在运行的POD中试用curl k8s-yaml-hello-internal
时,错误是curl: (7) Failed to connect to k8s-yaml-hello-internal port 80 after 1161 ms: Connection refused
有谁能给我指出问题所在吗?先谢了。
service.yaml
apiVersion: v1
kind: Service
metadata:
name: k8s-yaml-hello
spec:
selector:
app: k8s-yaml-hello
ports:
- port: 3000
targetPort: 3000
ingress.yaml
kind: Ingress
metadata:
name: k8s-yaml-hello-ingress
labels:
name: k8s-yaml-hello-ingress
spec:
rules:
- host: k8s-yaml-hello.info
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: k8s-yaml-hello
port:
number: 3000
externalName.yaml
apiVersion: v1
kind: Service
metadata:
name: k8s-yaml-hello-internal
spec:
ports:
- name: ''
appProtocol: http
protocol: TCP
port: 3000
type: ExternalName
externalName: k8s-yaml-hello.info
等/主机
127.0.0.1 k8s-yaml-hello.info
2条答案
按热度按时间rkkpypqq1#
当您获得
error curl: (7) Failed to connect
时:上述错误消息意味着没有Web服务器正在指定的IP和端口以及指定的(或隐含的)端口上运行。
使用
nano /etc/hosts
检查IP和端口是否指向正确的域。如果未指向,请提供正确的IP和端口。有关详细信息,请参阅此SO。
在入口。Yaml使用端口80,也在服务。yaml端口应该是80。服务端口和目标端口应该是不同的,因为根据你的yaml它是相同的。改变它为80,并尝试,如果你得到任何错误,张贴在这里。
z31licg02#
问题是
minikube tunnel
默认绑定到本地主机地址127.0.0.1。每个节点、机器、虚拟机、容器等都有自己的和相同的本地主机地址。这是为了访问本地服务,而不必知道网络接口的IP地址(服务在“我自己”上运行)。因此,当k8s-yaml-hello.info解析为127.0.0.1时,它将指向不同的服务取决于你是哪个容器(只是对我自己)。为了让它像你想要的那样工作,你首先必须找到你的主机网络接口的ip地址,例如
ifconfig
,它的名字是eth0或en 0,这取决于你的系统。然后,您可以使用
minikube tunnel
的bind-address
选项来绑定到该地址:这样,您的服务应该可以从容器中访问。请先检查IP地址:
然后确保使用/etc/hosts的名称解析在容器中可以使用
dig
、nslookup
、getent hosts
或容器中提供的类似名称。