Kubernetes - 如何向所有的奴才发送请求?

时间:2016-04-20 11:40:19

标签: docker kubernetes coreos

我有pod,它的目的是获取传入的数据并将其写入主机卷。我在所有的奴才中运行这个吊舱。

现在,当我将NodePort服务设置为此pod时,流量将一次转到1个pod。

但是我如何向不同爪牙的所有这些吊舱发送请求?如何在这里绕过负载均衡?我希望这些数据可以在所有小兵主机卷中使用。

3 个答案:

答案 0 :(得分:0)

您需要定义一个hostPort for the container并通过主机IP单独寻址每个节点上的每个pod。

请参阅最佳实践指南Services section中的注意事项。

答案 1 :(得分:0)

服务使用选择器来标识要代理的pod列表(如果它们处于Ready状态)。你可以简单地通过GET请求询问相同的pod列表:

ip:port

然后手动将您的请求发送到每个pod hostPort端点。如果您需要能够从群集网络外部发送请求,则可以创建代理窗格(通过标准方式暴露给外部网络)。代理吊舱可以使用您的标签(类似于上面)监视吊舱,并将收到的任何请求转发到就绪吊舱列表。

使用window.location.replace("home.html"); 可以实现类似的效果并转发到节点,但不鼓励使用hostPort(请参阅best practices)。

答案 2 :(得分:0)

这里有一种方法,只要您可以从k8s网络内的容器发送请求(这可能与OP的愿望完全不符,但我猜这可能有效)对于谷歌搜索这个人。)

你必须以某种方式查找豆荚。在这里,我在staging命名空间中找到标签为app=hot-app的所有广告连播:

kubectl get pods -l app=hot-app -n staging -o json | jq -r '.items[].status.podIP'

这个例子使用了很棒的jq工具来解析生成的json并获取pod ips,但是你可以用其他方式解析json,包括使用kubectl本身。

这会返回如下内容:

10.245.4.253
10.245.21.143

你可以找到这样的内部端口(例子只有一个容器,所以一个唯一的端口):

kubectl get pods -l app=hot-app -n staging -o json | jq -r '.items[].spec.containers[].ports[].containerPort' | sort | uniq
8080

然后你进入你的k8s群集中的curl容器,结合前面命令的ips和端口,并点击这样的pod:

curl 10.245.4.253:8080/hot-path
curl 10.245.21.143:8080/hot-path