我有pod,它的目的是获取传入的数据并将其写入主机卷 . 我正在所有的奴才中运行这个吊舱 .
现在,当我将NodePort服务设置为此pod时,流量将一次转到1个pod .
但是我如何向不同爪牙的所有这些 beans 荚发送请求?如何在这里绕过负载均衡?我希望这些数据在所有minions主机卷中都可用 .
您需要定义hostPort for the container并通过主机IP单独寻址每个节点上的每个pod .
请参阅最佳实践指南Services section中的警告 .
服务使用选择器来标识要代理的pod列表(如果它们处于Ready状态) . 您可以简单地通过GET请求询问相同的pod列表:
$ curl -G "$MASTER/api/v1/namespaces/$NAMESPACE/pods?labelSelector=$KEY=$VALUE"
然后手动将您的请求发送到每个pod ip:port endpoints . 如果您需要能够从群集网络外部发送请求,则可以创建代理窗格(通过标准方式暴露给外部网络) . 代理吊舱可以使用您的标签(类似于上面)监视吊舱,并将收到的任何请求转发到就绪吊舱列表 .
ip:port
使用 hostPort 并转发到节点可以实现类似的效果,但不鼓励使用hostPort(请参阅best practices) .
hostPort
这是一个有效的方法,只要你可以从k8s网络内的容器发送请求(这可能不完全符合OP的愿望,但我猜这可能适用于搜索此内容的人) .
你必须以某种方式查找 beans 荚 . 在这里,我发现 staging 名称空间中的所有pod都带有标签 app=hot-app :
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
3 回答
您需要定义hostPort for the container并通过主机IP单独寻址每个节点上的每个pod .
请参阅最佳实践指南Services section中的警告 .
服务使用选择器来标识要代理的pod列表(如果它们处于Ready状态) . 您可以简单地通过GET请求询问相同的pod列表:
然后手动将您的请求发送到每个pod
ip:port
endpoints . 如果您需要能够从群集网络外部发送请求,则可以创建代理窗格(通过标准方式暴露给外部网络) . 代理吊舱可以使用您的标签(类似于上面)监视吊舱,并将收到的任何请求转发到就绪吊舱列表 .使用
hostPort
并转发到节点可以实现类似的效果,但不鼓励使用hostPort(请参阅best practices) .这是一个有效的方法,只要你可以从k8s网络内的容器发送请求(这可能不完全符合OP的愿望,但我猜这可能适用于搜索此内容的人) .
你必须以某种方式查找 beans 荚 . 在这里,我发现
staging
名称空间中的所有pod都带有标签app=hot-app
:这个例子使用了很棒的jq工具来解析生成的json并获取pod ips,但你可以用其他方式解析json,包括使用kubectl本身 .
这会返回如下内容:
你可以找到这样的内部端口(例子只有一个容器,所以一个唯一的端口):
然后你进入你的k8s集群中的curl容器,结合前面命令的ips和端口,然后像这样点击pod: