学习知识要善于思考,思考,再思考!今天编程网小编就给大家带来《通过与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
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0