Go 如何在K8s中通过与pod的交互获取用户的ip

Go 如何在K8s中通过与pod的交互获取用户的ip,go,kubernetes,cni,Go,Kubernetes,Cni,我想根据用户(客户端)与POD的交互来获取其IP,(我正在考虑获取用户IP并根据其IP定位他) 为了更好地解释我的问题,我做了下面的图, 我能找到的唯一可能改善这种情况的方法是修补该服务,并将externalTrafficPolicy设置为“Local”,这样该服务将保留用户的IP 但是仍然不确定我应该如何或者甚至在哪个部分检查用户的IP。是否可以从pod外部监控用户的活动?有什么想法吗 (我正在使用golang) 更新:更清楚地说,我不是在创建POD,在下面的场景中,客户负责创建不同的POD

我想根据用户(客户端)与POD的交互来获取其IP,(我正在考虑获取用户IP并根据其IP定位他)

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

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

(我正在使用golang)

更新:更清楚地说,我不是在创建POD,在下面的场景中,客户负责创建不同的POD和容器,甚至可以创建他们需要的服务,这就像是他们的试验台,因此,我无法编辑他们的容器文件,但我可以在他们的容器旁边调出另一个容器,然后使用本文中的答案查找客户端的ip。你认为这样行吗


当然,这会起作用,但请记住,您只会在具有特定服务的POD的节点上接收流量(在您的情况下是
服务节点端口

如果您使用的是Golang

现在,这应该适用于L4或L7流量。如果您使用的是Golang,那么获取它的示例是查看X-Forwarded-For HTTP头:

主程序包
进口(
“编码/json”
“net/http”
)
func main(){
http.HandleFunc(“/”,ExampleHandler)
如果err:=http.ListenAndServe(“:8080”,nil);err!=nil{
恐慌(错误)
}
}
func示例处理程序(w http.ResponseWriter,r*http.Request){
w、 Header().Add(“内容类型”、“应用程序/json”)
resp,\:=json.Marshal(map[string]string{
“ip”:GetIP(r),
})
w、 写入(resp)
}
//GetIP通过读取转发的IP地址获取请求IP地址
//标头(用于代理)并回退以使用远程地址。
func GetIP(r*http.Request)字符串{
转发:=r.Header.Get(“X-forwarded-FOR”)
如果转发!=“”{
转寄的回信
}
返回r.RemoteAddr
}


✌️

谢谢您的回答,所以我想如果我使用LoadBalancer,这会起作用,是吗?那如果我不用呢?我们在哪里放置和使用这些代码?因为在我的例子中,用户负责创建他需要的pod,并且为了解决有人建议我解决的这个问题,每次用户创建pod时,我都会向该pod添加另一个小容器(因为容器共享pod中的本地主机)这将监控流量,我想现在您提供的答案和代码将适用于这一部分。赖斯:我刚刚更新了我的问题,请你再看一下,告诉我你的看法。事先非常感谢你。