原创 istio 获取客户端 IP
istio 获取客户端 IP 和 K8S 获取客户端 IP 一致,因为 istio 对外暴露的流量是位于 istio-system
namespace 下的 istio-ingressgateway
Service。
所以只需要修改 istio-ingressgateway
的配置文件,添加该配置项 externalTrafficPolicy: Local
在获取客户端 IP 的代码中通过获取 X-Forwarded-For
来获取客户端的真实 IP。
具体详见 部署一个获取 HTTP Header 程序到 K8S 中的示例,该示例使用 istio 暴露对外的服务。
以下是请求该示例的 CURL 请求,可以看到你的客户端 IP 在 X-Forwarded-For
中显示出来了。
$ curl -4 https://dhcp.cn/header
UserAgent: curl/7.64.1
Protocol: HTTP/1.1
Method: GET
Host: dhcp.cn
RemoteAddr: 127.0.0.1:35100
RequestURI: /header
Body:
X-Forwarded-For: x.88.88.88
Accept: */*
Referer:
~$ curl https://dhcp.cn/header -I
HTTP/2 200
date: Tue, 01 Mar 2022 12:39:33 GMT
content-length: 179
content-type: text/plain; charset=utf-8
x-envoy-upstream-service-time: 1
server: istio-envoy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
使用 curl -4 是用来请求你的 IPv4 地址,因为本站是 IPv4/IPv6 双栈站点。