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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文主要通过阿里云提供的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日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 JSON 应用服务中间件
Higress的日志收集中,底层用的是Envoy,可不可以实现类似NGINX的rsyslog发送?
【2月更文挑战第30天】Higress的日志收集中,底层用的是Envoy,可不可以实现类似NGINX的rsyslog发送?
19 2
|
18天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
33 2
|
19天前
|
运维 监控 应用服务中间件
LNMP详解(十四)——Nginx日志详解
LNMP详解(十四)——Nginx日志详解
16 2
|
22天前
|
关系型数据库 MySQL Linux
linux特定服务日志
Linux系统的服务日志在`/var/log`目录下,如系统日志(`/var/log/syslog`或`/var/log/messages`)、认证日志(`/var/log/auth.log`)、SSH日志(`/var/log/auth.log`或`/var/log/secure`)。Web服务器(Apache和Nginx)的访问和错误日志、MySQL错误日志、Postfix及Dovecot邮件服务器日志也在此处。日志位置可能因发行版和服务配置而异,不确定时可查服务配置或用`grep`搜索。使用`logrotate`可管理日志文件大小。
22 6
|
26天前
|
存储 监控 数据可视化
Nginx+Promtail+Loki+Grafana Nginx日志展示
通过这些步骤,你可以将Nginx的日志收集、存储、查询和可视化整合在一起。这样,你就可以在Grafana中轻松地创建和展示Nginx日志的图表和面板。
31 3
|
1月前
|
SQL JSON Kubernetes
Seata常见问题之服务端 error日志没有输出,客户端执行sql报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
107 0
|
应用服务中间件 Apache nginx
nginx自己写日志切割脚本
转自本人的博客:http://blog.teier.cn
1437 0
|
监控 应用服务中间件 nginx
|
应用服务中间件 nginx Perl
|
应用服务中间件 nginx Shell