Kubernetes服务无法在Docker中自行卷曲

时间:2019-01-28 18:38:23

标签: docker kubernetes

背景
我正在测试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容器内发生的情况完全相同,它可以访问容器但没有服务。我不明白我是否想念任何内部设置?

1 个答案:

答案 0 :(得分:0)

这可能是其中的任何一个:

  • pod服务2的服务正在监听127.0.0.1或未监听0.0.0.0(任何IP地址)
  • service2具有重定向,您的服务仅在端口80上侦听。您将必须启用另一个端口(可能是443),并使用curl选项运行-L来跟随链接。
  • pod维修服务2甚至没有在端口80上监听。