nginx-ingress通过ipv6暴露服务,并在nginx ingress日志中记录客户端真实ipv6的ip地址

简介: 本文主要通过阿里云提供的clb和nlb来实现,建议是提前创建好双栈的vpc和vsw(使用clb可以不用双栈vpc和vsw)

CLB方式:
1.新建一个ipv6的clb,绑定给nginx ingress,可以直接通过svc yaml来实现

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: ipv6
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: 'http:80'    #这条很重要
  name: nginx-ingress-lb-ipv6
  namespace: kube-system
  labels:
    app: nginx-ingress-lb-ipv6
spec:
  ports:
    - name: tcp-80-80
      port: 80
      protocol: TCP
      targetPort: 80
    - name: tcp-443-443
      port: 443
      protocol: TCP
      targetPort: 443
  selector:
    app: ingress-nginx    
  type: LoadBalancer

创建成功以后效果如图
image.png
2.修改nginx ingress的configmap
kubectl -n kube-system edit cm nginx-configuration
在data模块下添加:

compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"

效果如图:

image.png
3.测试效果
创建好ingress路由
image.png

在本地修改hosts,将预期域名解析到ipv6地址
image.png
本地测试
image.png

ingress日志:
image.png
NLB方式:
1.新建一个NLB实例给nginx ingress controller(注意这个必须要求集群所在vpc及交换机是支持双栈ipv6的,这里测试的ack集群也是ipv6双栈集群,ipv4的ack集群在双栈vpc下能否实现没有测试)

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: DualStack
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: 'off'
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: 'on'
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: >-
      cn-chengdu-b:vsw-2vcqjq0tcvvxxxx,cn-chengdu-a:vsw-2vcm16t55w3ycysxxxxx
  name: nginx-ingress-nlb-ipv6
  namespace: kube-system
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: ingress-nginx
  sessionAffinity: None
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

效果如图:
image.png
2.修改nginx ingress的configmap
在data模块下添加:
use-proxy-protocol: 'true'
效果如图:
image.png
3.测试效果
创建好ingress路由
image.png

修改本地hosts,将域名解析到nlb的ipv6地址上
nlb ipv6地址获取如图
image.png
修改本地hosts
image.png
访问测试:
image.png
image.png

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
1001 90
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
909 37
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
4223 5
Nginx 如何代理转发传递真实 ip 地址?
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1589 3
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
1587 3
|
应用服务中间件 nginx
nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
【8月更文挑战第27天】nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
1156 6
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
存储 Ubuntu 应用服务中间件
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
407 4
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
2043 1
|
网络安全
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]
【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024-03-26 实验结果失败]
273 0