【发布时间】:2018-03-15 10:37:38
【问题描述】:
好的,所以目前我已经在 AWS EC2 实例上启动并运行了 kubernetes master,并且在我的笔记本电脑上运行了一个工作人员:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 34d v1.9.2
worker Ready <none> 20d v1.9.2
我使用以下配置创建了一个部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hostnames
labels:
app: hostnames-deployment
spec:
selector:
matchLabels:
app: hostnames
replicas: 1
template:
metadata:
labels:
app: hostnames
spec:
containers:
- name: hostnames
image: k8s.gcr.io/serve_hostname
ports:
- containerPort: 9376
protocol: TCP
部署正在运行:
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hostnames 1 1 1 1 1m
已在工作节点上创建了一个 pod:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hostnames-86b6bcdfbc-v8s8l 1/1 Running 0 2m
从工作节点,我可以 curl pod 并获取信息:
$ curl 10.244.8.5:9376
hostnames-86b6bcdfbc-v8s8l
我使用以下配置创建了一个服务:
kind: Service
apiVersion: v1
metadata:
name: hostnames-service
spec:
selector:
app: hostnames
ports:
- port: 80
targetPort: 9376
服务已启动并运行:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hostnames-service ClusterIP 10.97.21.18 <none> 80/TCP 1m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 34d
据我了解,该服务应该在集群范围内公开 pod,并且我应该能够使用服务 IP 从集群上的任何节点获取 pod 正在服务的信息。
如果我从工作节点卷曲服务,它会按预期工作:
$ curl 10.97.21.18:80
hostnames-86b6bcdfbc-v8s8l
但如果我尝试从位于 AWS EC2 实例上的主节点卷曲服务,请求将挂起并最终超时:
$ curl -v 10.97.21.18:80
* Rebuilt URL to: 10.97.21.18:80/
* Trying 10.97.21.18...
* connect to 10.97.21.18 port 80 failed: Connection timed out
* Failed to connect to 10.97.21.18 port 80: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to 10.97.21.18 port 80: Connection timed out
为什么master节点的请求不能通过Cluster-IP服务到达worker节点上的pod?
我已经阅读了很多关于 kubernetes 网络和官方 kubernetes 服务文档的文章,但找不到解决方案。
【问题讨论】:
标签: amazon-web-services kubernetes