首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kubernetes服务IP不可及

kubernetes服务IP不可及
EN

Stack Overflow用户
提问于 2017-03-09 21:08:26
回答 3查看 21.1K关注 0票数 8

因此,我已经使用关于CoreOS手动安装指南的Kubernetes启动并运行了一个Kubernetes集群。

代码语言:javascript
复制
$ kubectl get no
NAME              STATUS                     AGE
coreos-master-1   Ready,SchedulingDisabled   1h
coreos-worker-1   Ready                      54m

$ kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health": "true"}
etcd-2               Healthy   {"health": "true"}
etcd-1               Healthy   {"health": "true"}

$ kubectl get pods --all-namespaces -o wide
NAMESPACE     NAME                                      READY     STATUS    RESTARTS   AGE       IP               NODE
default       curl-2421989462-h0dr7                     1/1       Running   1          53m       10.2.26.4        coreos-worker-1
kube-system   busybox                                   1/1       Running   0          55m       10.2.26.3        coreos-worker-1
kube-system   kube-apiserver-coreos-master-1            1/1       Running   0          1h        192.168.0.200   coreos-master-1
kube-system   kube-controller-manager-coreos-master-1   1/1       Running   0          1h        192.168.0.200   coreos-master-1
kube-system   kube-proxy-coreos-master-1                1/1       Running   0          1h        192.168.0.200   coreos-master-1
kube-system   kube-proxy-coreos-worker-1                1/1       Running   0          58m       192.168.0.204   coreos-worker-1
kube-system   kube-scheduler-coreos-master-1            1/1       Running   0          1h        192.168.0.200   coreos-master-1

$ kubectl get svc --all-namespaces
NAMESPACE   NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
default     kubernetes   10.3.0.1     <none>        443/TCP   1h

与指南一样,我已经设置了一个服务网络10.3.0.0/16和一个pod网络10.2.0.0/16。豆荚网络似乎很好,因为繁忙箱和卷曲容器得到IP。但是,服务网络也存在问题。最初,我在部署kube-dns时遇到过这样的情况:无法到达服务IP 10.3.0.1,因此kube无法启动所有容器,最终DNS无法工作。

在卷曲舱里,我可以复制这个问题:

代码语言:javascript
复制
[ root@curl-2421989462-h0dr7:/ ]$ curl https://10.3.0.1
curl: (7) Failed to connect to 10.3.0.1 port 443: No route to host

[ root@curl-2421989462-h0dr7:/ ]$ ip route
default via 10.2.26.1 dev eth0
10.2.0.0/16 via 10.2.26.1 dev eth0
10.2.26.0/24 dev eth0  src 10.2.26.4

容器中只有默认路径,这似乎是可以的。据我所知,请求(到默认路由)应该由工作节点上的kube-proxy拦截,然后转发到主节点上的代理,在主节点上通过iptables将IP转换到主公共IP。

网桥/netfilter sysctl设置似乎存在一个常见问题,但在我的设置中,这似乎很好:

代码语言:javascript
复制
core@coreos-worker-1 ~ $ sysctl net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 1

我现在很难排除故障,因为我不了解服务IP是用来做什么的,服务网络应该如何在流量方面工作,以及如何最好地调试它。

以下是我的问题:

  • 服务网络的第一个IP (本例中为10.3.0.1)用于什么?
  • 以上交通流描述是否正确?如果没有,容器需要采取哪些步骤才能到达服务IP?
  • 在交通流中调试每个步骤的最佳方法是什么?(我不知道原木出了什么问题)

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-13 09:41:53

Sevice网络为服务提供固定的IP。它不是一个可路由的网络(所以不要期望ip ro显示任何东西,ping也不会工作),而是一个集合iptables规则,由kube在每个节点上管理(参见节点上的iptables -L; iptables -t nat -L,而不是Pods)。这些虚拟IP (见图!)充当端点的负载平衡代理(kubectl get ep),它通常是Pods的端口(但并不总是),具有服务中定义的一组特定的标签。

服务网络上的第一个IP是为了到达本身.它正在监听端口443 (kubectl describe svc kubernetes)。

在每个网络/群集设置上,故障排除是不同的。我一般会查证:

  • kube-代理在每个节点上运行吗?在一些设置中,它是通过systemd运行的,而在另一些设置中,有一个DeamonSet在每个节点上调度一个Pod。在您的设置中,它被部署为由kubelets从/etc/kubernetes/manifests/kube-proxy.yaml创建的静态Pods
  • 找到库贝代理的日志并找到线索(你能发布一些吗?)
  • 将kube-代理转换为userspace模式。同样,细节取决于您的设置。对你来说,它就在我上面提到的文件里。将--proxy-mode=userspace作为参数追加到每个节点
  • 覆盖(pod)网络是否正常工作?

如果你留下评论,我会回复你的。

票数 11
EN

Stack Overflow用户

发布于 2018-02-02 01:16:44

我也遇到了同样的问题,对我起作用的最终解决方案是在集群中的所有节点上启用IP转发,而我忽略了这一点。

代码语言:javascript
复制
$ sudo sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

服务IP和DNS随后立即开始工作。

票数 3
EN

Stack Overflow用户

发布于 2017-05-17 12:32:58

我也有同样的问题,原来是kube-proxy.yaml中的一个配置问题,对于“主”参数,我的ip地址是in --master=192.168.3.240,但是它实际上需要一个url类似-master=https://192.168.3.240

成功地使用--代理模式=iptables (v1.6.x)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42705432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档