最近服务器都迁移到腾讯云 TKE 了,就是腾讯云 Kubernetes 服务,然后最近有个需求是获取客户端真实 IP。
我的情况:
- 服务用 Django 写的,通过 HTTP 请求头获取真实 IP
- Django 通过 uwsgi 运行,并通过 Nginx 转发出去
- Ingress 使用的 Nginx Ingress,而不是 TKE Ingress
下面说下几个关键配置:
Django 中获取 IP
获取方式如下:
1 |
def get_client_ip(request): |
uwsgi 配置
uwsgi.ini 配置如下:
1 |
[uwsgi] |
Nginx 配置
Nginx 需要转发 uwsgi 出去,并且加上三个关键请求头:
1 |
server { |
Supervisor 配置
Supervisor 需要启动 Uwsgi 和 Nginx:
1 |
[supervisord] |
Dockerfile 配置
Dockkerfile 里面指定启动的命令为 supervisor:
1 |
FROM python:3.7-alpine |
TKE 配置
这里参考来源为:https://cloud.tencent.com/document/product/457/48949
最关键的就是:
这里我需要修改 Service 的负载均衡:
修改 externalTrafficPolicy 为 Local 即可:
大功告成,后面 IP 就能成功获取到了。