Ham*_*mid 5 amazon-elb kubernetes kubernetes-ingress amazon-eks ingress-nginx
我使用以下代码创建了 Nginx Ingress 和服务:
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
type: ClusterIP
selector:
name: my-app
ports:
- port: 8000
targetPort: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myingress
annotations:
kubernetes.io/ingress.class: nginx
labels:
name: myingress
spec:
rules:
- host: mydomain.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: my-service
port:
number: 8000
Run Code Online (Sandbox Code Playgroud)
Nginx ingress 安装有:
helm install ingress-nginx ingress-nginx/ingress-nginx
.
我还为 ELB 启用了代理协议。但在 nginx 日志中,我没有看到 X-Forwarded-For 和 X-Real-IP 标头的真实客户端 IP。这是我在应用程序日志中看到的最终标题:
X-Forwarded-For:[192.168.21.145] X-Forwarded-Port:[80] X-Forwarded-Proto:[http] X-Forwarded-Scheme:[http] X-Real-Ip:[192.168.21.145] X-Request-Id:[1bc14871ebc2bfbd9b2b6f31] X-Scheme:[http]
Run Code Online (Sandbox Code Playgroud)
如何获取真实的客户端 IP,而不是入口 Pod IP?还有一种方法可以知道 ELB 正在向入口发送哪些标头?
一种解决方案是使用externalTrafficPolicy
: Local
(请参阅文档)。
事实上,根据kubernetes documentation
:
由于该功能的实现,目标容器中看到的源IP并不是客户端的原始源IP。... service.spec.externalTrafficPolicy - 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:集群(默认)和本地。集群掩盖了客户端源 IP,并可能导致第二跳到另一个节点,但应该具有良好的整体负载分布。Local 保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二跳,但存在潜在的流量传播不平衡的风险。
如果您想遵循此路线,请更新nginx ingress controller
Service
并添加该externalTrafficPolicy
字段:
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress-controller
spec:
...
externalTrafficPolicy: Local
Run Code Online (Sandbox Code Playgroud)
应在入口控制器和 ELB 的 ConfigMap 中启用代理协议。
L4 使用代理协议
对于 L7 使用use-forwarded-headers
# configmap.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
use-forwarded-headers: "true"
use-proxy-protocol: "true"
Run Code Online (Sandbox Code Playgroud)
https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#proxy-protocol
归档时间: |
|
查看次数: |
22289 次 |
最近记录: |