如果我们的整个系统还有用 Cloudflare的CDN的话。 这个时候我们想获得真实的IP 就需要编辑 ingress-nginx-controller的 configmap
kubectl edit configmap ingress-nginx-controller
加上 enable-real-ip 和 real_ip_header 如下:
apiVersion: v1
data:
enable-real-ip: "true"
server-snippet: |
real_ip_header CF-Connecting-IP;
kind: ConfigMap
metadata:
这样 cloudflare 的 CF-Connecting-IP 就会放到 x-Forwarded-For x-Real-IP 的 http header里面。程序通过这两个可以读到真实的IP
在Asp.net core当中还可以设置 UseForwardedHeaders 这样获取IP 和 判断是不是https的代码都不需要改动。
public void Configure(IApplicationBuilder application, IHostingEnvironment environment)
{
var options = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders = ForwardedHeaders.All
// ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto 只用这两个的话。swagger会出错
};
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
application.UseForwardedHeaders(options);
// ...
}