AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1065356
Accepted
growse
growse
Asked: 2021-06-02 11:51:34 +0800 CST2021-06-02 11:51:34 +0800 CST 2021-06-02 11:51:34 +0800 CST

具有 externalTrafficPolicy=local 的 k8s 负载均衡器服务通过 IPv4 上的客户端 IP,在 IPv6 上隐藏它

  • 772

我无法让 kubernetes IPv6SingleStack LoadBalancer服务通过正确的源 IP 地址传递到 pod。SingleStack LoadBalancer它在将流量传递到相同 pod的姊妹 IPv4 上运行良好。

该集群是一个裸机 v1.21.1 双栈集群kubeadm,使用 Calico v3.18 作为 cni 和 MetalLB 来为配置了type: LoadBalancer. 然后将 Calico 配置为通过 BGP 向本地路由器宣布负载均衡器 IP。以具有两个服务(一个用于 IPv4,一个用于 IPv6)的单个nginx部署为例,如果我通过 IPv4 地址卷曲 IP,则 nginx 访问日志会在以下位置打印正确的客户端 IP 192.168.2.0/24:

192.168.2.128 - - [01/Jun/2021:19:32:37 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"

但是将来自同一客户端的 IPv6 地址卷曲在 中2001:8b0:c8f:e8b0::/64,nginx 显示的客户端 IP 地址为fd5a:1111:1111::f31f

fd5a:1111:1111::f31f - - [01/Jun/2021:19:34:23 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"

该地址来自集群的serviceSubnet,fd5a:1111:1111::/112并且恰好是clusterIPIPv6 服务的地址。似乎有些东西实际上在这里做了一些 TCP 代理(ipvs?),但目前尚不清楚它为什么会这样。如果是的话,我希望这externalTrafficPolicy是Cluster- 事实上,如果我将服务从 更改Local为Cluster,我将获得在 IPv4 上转发请求的集群节点的本地 IP 地址(如预期的那样),以及在 IPv6 上相同的集群 IP 地址。externalTrafficPolicy在 IPv6 的情况下似乎没有效果。

我是否遗漏了一些明显的东西,或者这些服务的行为方式是否应该相同?

测试清单:

---
apiVersion: v1
kind: Service
metadata:
  name: test-service-source-ip-v4
  namespace: default
  labels:
    k8s-app: test-service-source-ip
spec:
  selector:
    k8s-app: test-service-source-ip
  type: LoadBalancer
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  loadBalancerIP: 192.168.254.11
  externalTrafficPolicy: "Local"
  ports:
    - name: http-tcp
      protocol: TCP
      port: 80
---
apiVersion: v1
kind: Service
metadata:
  name: test-service-source-ip-v6
  namespace: default
  labels:
    k8s-app: test-service-source-ip
spec:
  selector:
    k8s-app: test-service-source-ip
  type: LoadBalancer
  ipFamilies:
    - IPv6
  ipFamilyPolicy: SingleStack
  loadBalancerIP: 2001:8b0:c8f:e8b1:beef:f00d::11
  externalTrafficPolicy: "Local"
  ports:
    - name: http-tcp
      protocol: TCP
      port: 80

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: default
  name: test-service-source-ip
  labels:
    k8s-app: test-service-source-ip
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: test-service-source-ip
  template:
    metadata:
      labels:
        k8s-app: test-service-source-ip
    spec:
      containers:
        - name: test-service-source-ip
          image: nginx:1
          ports:
            - containerPort: 80
              protocol: TCP
networking ipv6 kubernetes ipvs calico
  • 1 1 个回答
  • 361 Views

1 个回答

  • Voted
  1. Best Answer
    growse
    2021-06-19T08:35:17+08:002021-06-19T08:35:17+08:00

    事实证明,我有一个ip-masq-agent运行的旧安装,它被配置为错误地对进出集群的 IPv6 流量进行 natting。我通过查看ip6tables规则并查看MASQUERADE由ip-masq-agent.

    从集群中删除此部署并重新启动节点以删除ip6tables规则解决了该问题。

    • 1

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve