返回顶部
首页 > 资讯 > 后端开发 > GO >通过与Kubernetes Pod互动如何获取用户IP
  • 954
分享到

通过与Kubernetes Pod互动如何获取用户IP

2024-04-04 23:04:06 954人浏览 泡泡鱼
摘要

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《通过与kubernetes Pod互动如何获取用户IP》,以下内容主要包含等知识点,如果你正在学习或准备学习golang,就都不要错过本

学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《通过与kubernetes Pod互动如何获取用户IP》,以下内容主要包含等知识点,如果你正在学习或准备学习golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我想根据用户(客户端)与 Pod 的交互来获取他的 IP,(我正在考虑获取用户 IP 并根据他的 IP 找到他)

我制作了下图以更好地解释我的问题, 我能找到的唯一可能改善这种情况的方法是修补该服务并将 externalTrafficPolicy 设置为“本地”,以便该服务将保留用户的 IP。

但仍然不确定我应该如何甚至在哪一部分检查用户的IP。是否可以从 Pod 外部监控用户的活动?有什么想法吗?

(我正在使用 Golang)

更新:为了更清楚地说明,我没有创建 Pod,在下面的场景中,客户端负责并且可以创建不同的 Pod 和容器,甚至是他们需要的服务,这就像一个测试-bed 为他们,所以我无法编辑他们的容器文件,但我也许可以在他们的容器旁边调出另一个容器,然后也许使用这篇文章的答案 https://stackoverflow.com/a/27971761/9350055 来找到客户端的ip。你认为这行得通吗?


解决方案


当然,这会起作用,但请记住,您只会在拥有特定服务的 pod 的节点上接收流量(在您的情况下是 service nodeport)。

如果您使用 golang

现在,这应该适用于 l4 或 l7 流量。如果您使用 golang,如何获取它的示例是查看 x-forwarded-for Http 标头:

package main

import (
    "encoding/JSON"
    "net/http"
)

func main() {
    http.HandleFunc("/", ExampleHandler)
    if err := http.ListenAndServe(":8080", nil); err != nil {
        panic(err)
    }
}

func ExampleHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Add("Content-Type", "application/json")
    resp, _ := json.Marshal(map[string]string{
        "ip": GetIP(r),
    })
    w.Write(resp)
}

// GetIP gets a requests IP address by reading off the forwarded-for
// header (for proxies) and falls back to use the remote address.
func GetIP(r *http.Request) string {
    forwarded := r.Header.Get("X-FORWARDED-FOR")
    if forwarded != "" {
        return forwarded
    }
    return r.RemoteAddr
}

另外,here's an example of how to get for L4 services (tcp)。

✌️<​​/p>

终于介绍完啦!小伙伴们,这篇关于《通过与Kubernetes Pod互动如何获取用户IP》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

您可能感兴趣的文档:

--结束END--

本文标题: 通过与Kubernetes Pod互动如何获取用户IP

本文链接: https://lsjlt.com/news/595885.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作