AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

serviço loadbalancer k8s com externalTrafficPolicy=local passa pelo ip do cliente no IPv4, oculta-o no IPv6

  • 772

Estou tendo problemas para obter um SingleStack LoadBalancerserviço IPv6 do kubernetes passando pelo endereço IP de origem correto para os pods. Funciona bem em um IPv4 irmão SingleStack LoadBalancerque passa o tráfego para os mesmos pods.

O cluster é um cluster dual-stack bare-metal v1.21.1 criado com kubeadme usa Calico v3.18 como cni e MetalLB para alocar IPs de balanceador de carga para serviços configurados com type: LoadBalancer. O Calico é então configurado para anunciar os IPs do balanceador de carga para o roteador local pelo BGP. Tomando um exemplo de brinquedo de uma única nginximplantação com dois serviços (um para IPv4, um para IPv6), se eu enrolar o IP através do endereço IPv4, o log de acesso do nginx imprime o IP do cliente correto em 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" "-"

Mas enrolando o endereço IPv6 do mesmo cliente em 2001:8b0:c8f:e8b0::/64, o nginx mostra um endereço IP do cliente defd5a:1111:1111::f31f

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

Este endereço é do cluster serviceSubnete fd5a:1111:1111::/112passa a ser o clusterIPendereço do serviço IPv6. Parece que algo está realmente fazendo algum proxy TCP aqui (ipvs?), mas não está claro por que está se comportando dessa maneira. Eu esperaria isso se externalTrafficPolicyfosse Cluster- na verdade, se eu alterar os serviços de Localpara Cluster, recebo o endereço IP local do nó do cluster encaminhando a solicitação no IPv4 (como esperado) e o mesmo endereço do clusterIP no IPv6. externalTrafficPolicyparece não ter efeito no caso IPv6.

Estou perdendo algo óbvio ou esses serviços devem se comportar da mesma maneira que os outros?

Manifesto do teste:

---
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 respostas
  • 361 Views

1 respostas

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

    Acontece que eu tinha uma instalação antiga de ip-masq-agentexecução, que foi configurada para fazer natting erroneamente do tráfego IPv6 dentro e fora do cluster. Eu descobri isso olhando as ip6tablesregras e vendo um monte de MASQUERADEregras que foram preenchidas por ip-masq-agent.

    A remoção dessa implantação do cluster e a reinicialização dos nós para remover as ip6tablesregras resolveram o problema.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve