我有pod,它的目的是获取传入的数据并将其写入主机卷。我在所有的奴才中运行这个吊舱。
现在,当我将NodePort服务设置为此pod时,流量将一次转到1个pod。
但是我如何向不同爪牙的所有这些吊舱发送请求?如何在这里绕过负载均衡?我希望这些数据可以在所有小兵主机卷中使用。
答案 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