【发布时间】:2018-10-29 19:08:24
【问题描述】:
我使用指令here 在 VirtualBox 上创建了一个 3 节点 kubernetes 集群(1 个 master + 2 个 worker)。我正在使用 Flannel 作为覆盖网络。
我在安装过程中在master上设置了sysctl -w net.bridge.bridge-nf-call-iptables=1和sysctl -w net.bridge.bridge-nf-call-ip6tables=1。当时我还没有在worker上设置它们,但我后来设置了它们并重新启动了两个节点。
-
我有一个用 Go 编写的简单 Web 应用程序,侦听端口 8080。因此我创建了一个 pod + 复制控制器:
kubectl run foo --image=<...> --port=8080 --generator=run/v1我可以使用 POD IP 和端口 8080 访问我的服务。
-
我还创建了一个 ClusterIP 服务。
kubectl expose rc foo --name=foo-http --port=8081 --target-port=8080 # ClusterIP service # kubectl get svc foo-http NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE foo-http ClusterIP 10.106.88.24 <none> 8081/TCP 14m当我从任何集群节点运行它时,它会挂起:
curl http://10.106.88.24:8081 # that's the ClusterIP通过运行 strace,我可以看到 curl 启动了一个非阻塞
connect,并在poll上循环旋转,而套接字却没有为read做好准备 - 所以连接不会发生通过。 -
如果我改为创建 NodePort 服务,我只会收到拒绝连接。
# cat svc_nodeport.json apiVersion: v1 kind: Service metadata: name: foo-http spec: type: NodePort ports: - port: 8081 targetPort: 8080 nodePort: 31123 selector: app: foo # kubectl create -f svc_nodeport.json # kubectl get svc foo-http NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE foo-http NodePort 10.104.78.88 <none> 8081:31123/TCP 7m当我尝试通过端口 31123 连接时:
# curl http://<node-ip>:31123 # Tried on master and both workers curl: (7) Failed connect to <node-ip>:31123; Connection refused
如何调试这个?
【问题讨论】:
标签: docker kubernetes flannel