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 / 1166268
Accepted
Сергей Дударев
Сергей Дударев
Asked: 2024-10-07 20:28:45 +0800 CST2024-10-07 20:28:45 +0800 CST 2024-10-07 20:28:45 +0800 CST

Por que não posso colocar MetalLB no k3s?

  • 772

Boa tarde, me deparei com o problema de não ser possível anexar o MetalLB ao K3S, tenho um cluster com 3 masters e 3 workers

NAME            STATUS   ROLES                       AGE    VERSION
master-node-1   Ready    control-plane,etcd,master   4d2h   v1.30.5+k3s1
master-node-2   Ready    control-plane,etcd,master   4d1h   v1.31.1+k3s1
master-node-3   Ready    control-plane,etcd,master   4d1h   v1.31.1+k3s1
worker-node-1   Ready    <none>                      4d1h   v1.31.1+k3s1
worker-node-2   Ready    <none>                      4d     v1.31.1+k3s1
worker-node-3   Ready    <none>                      4d     v1.31.1+k3s1

inicialmente, tentei instalar o MetalLB desta forma

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml

configuração

# config.yml
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.0.170-192.168.0.180

com essa abordagem o Load Balancer estava funcionando, não estava estável no tap, com 50% de probabilidade era impossível entrar no site. Então descobri que essa é uma abordagem desatualizada. Tentei uma nova

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml

configuração

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: k3s-lb-pool
  namespace: metallb
spec:
  addresses:
  - 192.168.0.170-192.168.0.180
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: k3s-lb-pool
  namespace: metallb

mas recebo um erro

Error from server (InternalError): error when creating "metalLB-config.yaml": Internal error occurred: failed calling webhook "ipaddresspoolvalidationwebhook.metallb.io": failed to call webhook: Post "https://metallb-webhook-service.metallb.svc:443/validate-metallb-io-v1beta1-ipaddresspool?timeout=10s": no endpoints available for service "metallb-webhook-service"
Error from server (InternalError): error when creating "metalLB-config.yaml": Internal error occurred: failed calling webhook "l2advertisementvalidationwebhook.metallb.io": failed to call webhook: Post "https://metallb-webhook-service.metallb.svc:443/validate-metallb-io-v1beta1-l2advertisement?timeout=10s": no endpoints available for service "metallb-webhook-service"

mas o namespace ainda está funcionando corretamente

root@master-node-1:~# kubectl get pod -n=metallb-system
NAME                          READY   STATUS    RESTARTS        AGE
controller-86f5578878-9ddsr   1/1     Running   2 (3m31s ago)   4m57s
speaker-5j47x                 1/1     Running   0               4m56s
speaker-6drpd                 1/1     Running   0               4m56s
speaker-ccpmq                 1/1     Running   0               4m56s
speaker-jfpch                 1/1     Running   1 (3m12s ago)   4m56s
speaker-mps8b                 1/1     Running   0               4m57s
speaker-t9lx2                 1/1     Running   0               4m56s

(Peço desculpas antecipadamente, o inglês não é minha língua nativa)

kubernetes
  • 2 2 respostas
  • 121 Views

2 respostas

  • Voted
  1. Eleasar
    2024-10-11T06:35:29+08:002024-10-11T06:35:29+08:00

    Bem-vindo ao ServerFault 👋

    Por padrão, o k3s já inclui um LoadBalancer chamado ServiceLB (anteriormente chamado de Klipper LoadBalacer). Suspeito que ambos estavam sendo executados simultaneamente, o que é conhecido por causar problemas: um deles é que seus serviços do tipo LoadBalancer só podem ser acessados ​​esporadicamente. Isso ocorre porque o ServiceLB e o MetalLB usam anúncios L2 por padrão.

    Por isso, você precisará desabilitar o ServiceLB se quiser usar o MetalLB em combinação com o k3s ( conforme descrito na documentação deles ). Se seu cluster já estiver em execução, você pode adicionar o --disable servicelbsinalizador ao arquivo de unidade systemd localizado assim /etc/systemd/system/k3s.service:

    ...
    ExecStart=/usr/local/bin/k3s \
    server \
        '--server' \
        '...' \
        '--disable' \
        'servicelb' \
        '--disable' \ <-- You can use multiple disable flags.
        'traefik' \
        '...' \
        'node-role.kubernetes.io/master=true:NoSchedule' \
    

    O segundo problema que você descreveu é um pouco mais difícil de depurar para mim. Suspeito que você não esperou o suficiente antes de tentar criar o IPAddressPooland L2Advertisementmas isso é apenas um palpite baseado no fato de que seu metallb-webhook-servicenão parece ter nenhum endpoint. Talvez você possa compartilhar alguns logs do pod do controlador MetalLB? Mas eu tentaria desabilitar o ServiceLB e então reinstalar o MetalLB primeiro.

    • 0
  2. Best Answer
    Сергей Дударев
    2024-10-15T16:36:02+08:002024-10-15T16:36:02+08:00

    finalmente resolvemos esse problema. primeiro, instalamos o próprio metallb (cuidado, dependendo da versão, o arquivo de configuração pode mudar)

    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml
    

    então executamos a lista de endereços IP

    pool-ip.yml
    
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: pool-ip
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.0.170-192.168.0.200
    
    kubectl -n metallb-system apply -f pool-ip.yml
    

    então definitivamente verificamos se a lista de endereços IP foi criada

    kubectl -n metallb-system get IPAddressPool
    

    se ocorrer um erro semelhante

    Error from server (InternalError): error when creating "metalLB-config.yaml": Internal error occurred: failed calling webhook "ipaddresspoolvalidationwebhook.metallb.io": failed to call webhook: Post "https://metallb-webhook-service.metallb.svc:443/validate-metallb-io-v1beta1-ipaddresspool?timeout=10s": no endpoints available for service "metallb-webhook-service"
    

    então execute este comando, e após o erro não haverá

    kubectl delete validatingwebhookconfigurations metallb-webhook-configuration
    

    depois disso, ele lança algo como um provedor para esses endereços IP

    l2-advertisement.yml
    
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: k3s-lb-pool
      namespace: metallb-system
    spec:
      ipAddressPools:
      - pool-ip
    
    kubectl apply -f l2-advertisement.yml
    

    depois disso, verificamos se ele sugou os endereços ip

    kubectl get l2advertisement -A
    

    Depois de tudo isso, o Load Balancer deve estar disponível (mais uma vez, lembro que inglês não é minha língua nativa, então se algo não estiver claro, peço desculpas)

    • 0

relate perguntas

  • Containerd falhou ao iniciar após Nvidia Config

  • Como posso modificar o configmap CoreDNS antes de inicializar o cluster usando o kubeadm?

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