背景
我正在测试Minikube
上的Kubernetes设置。我成功设置了两个简单的服务,它们由简单的docker映像支持。以下是我的服务配置示例。我使用NodePort
在端口80上公开服务。
# service 1
kind: Service
apiVersion: v1
metadata:
name: service1
spec:
selector:
app: service1
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: service1-deployment
labels:
app: service1
spec:
replicas: 1
selector:
matchLabels:
app: service1
template:
metadata:
labels:
app: service1
spec:
containers:
- name: service1
image: service1
imagePullPolicy: Never
ports:
- containerPort: 8080
---
# service 2
kind: Service
apiVersion: v1
metadata:
name: service2
spec:
selector:
app: service2
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: service2-deployment
labels:
app: service2
spec:
replicas: 1
selector:
matchLabels:
app: service2
template:
metadata:
labels:
app: service2
spec:
containers:
- name: service2
image: service2
imagePullPolicy: Never
ports:
- containerPort: 8080
问题
我使用docker exec -it
进入docker容器。我可以从curl service1
容器中service2
进行任何操作。但是,如果我尝试从curl service2
容器中service2
,则会收到超时连接错误。
curl -v service2
的结果
重建的URL至:service2 /
尝试10.101.116.46 ...
TCP_NODELAY设置
连接到10.101.116.46端口80失败:连接超时
无法连接到service2端口80:连接超时
闭合连接0
curl:(7)无法连接到service2端口80:连接超时
我猜想DNS记录已正确解析,因为10.101.116.46
是附加到service2
的正确IP。那么可能是什么原因导致此问题呢?
更多后续测试
据我了解,Kubernetes服务在内部将端口映射到容器端口,因此在我的情况下,它将服务端口80
映射到Pod端口8080
。从service2
容器中,我可以成功curl <service2 pod ip>:8080
,但不能curl <service2 ip>
,这可以解决连接超时错误。而且在service1
容器内发生的情况完全相同,它可以访问容器但没有服务。我不明白我是否想念任何内部设置?
答案 0 :(得分:0)
这可能是其中的任何一个:
127.0.0.1
或未监听0.0.0.0
(任何IP地址)80
上侦听。您将必须启用另一个端口(可能是443
),并使用curl
选项运行-L
来跟随链接。80
上监听。