首页 文章

Kubernetes - 如何向所有小兵发送请求?

提问于
浏览
1

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

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

但是我如何向不同爪牙的所有这些 beans 荚发送请求?如何在这里绕过负载均衡?我希望这些数据在所有minions主机卷中都可用 .

3 回答

  • 0

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

    请参阅最佳实践指南Services section中的警告 .

  • 0

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

    $ curl -G "$MASTER/api/v1/namespaces/$NAMESPACE/pods?labelSelector=$KEY=$VALUE"
    

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

    使用 hostPort 并转发到节点可以实现类似的效果,但不鼓励使用hostPort(请参阅best practices) .

  • 0

    这是一个有效的方法,只要你可以从k8s网络内的容器发送请求(这可能不完全符合OP的愿望,但我猜这可能适用于搜索此内容的人) .

    你必须以某种方式查找 beans 荚 . 在这里,我发现 staging 名称空间中的所有pod都带有标签 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
    

相关问题