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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文主要通过阿里云提供的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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9天前
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
|
3天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
7天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
8天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
1天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
4天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
5天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
6天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
9天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog
|
10天前
日志管理服务
日志管理服务 1.保证rsyslogd服务运行 查询是否启动 ps aux | grep "rsyslog" | grep -v"grep" 查询rsyslogd 自启动状态 systemctl list-unit-files | grep "rsyslog