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 / 1164766
Accepted
piyush sachdeva
piyush sachdeva
Asked: 2024-08-01 11:15:27 +0800 CST2024-08-01 11:15:27 +0800 CST 2024-08-01 11:15:27 +0800 CST

Kubernetes no aws ec2 - certificado de registro privado assinado por autoridade desconhecida

  • 772
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Server Fault. Migrada há 38 minutos .

Resumo da questão

Tenho um cluster Kubernetes 1.30 em execução em 3 servidores AWS EC2, 1 nó mestre e 2 nós de trabalho. Estou tentando implantar um registro de contêiner privado usando a registry:2.8.2imagem do projeto de distribuição CNCF. Segui as etapas listadas abaixo, mas estou recebendo o erro "certificado x509 assinado por autoridade desconhecida" enquanto tento executar um login docker no registro.

Observação: estou usando certificados autoassinados.

Passos para reproduzir

  1. Crie certificados autoassinados e autenticação de usuário. Os certificados TLS usam OpenSSL:

    mkdir registry
    cd registry
    mkdir certs
    mkdir auth
    
    openssl req -x509 -newkey rsa:4096 -days 365 -nodes -sha256 -keyout certs/tls.key -out certs/tls.crt -subj "/CN=my-registry" -addext "subjectAltName = DNS:my-registry"
    
  2. Use htpasswdpara adicionar autenticação de usuário para acesso ao registro. As credenciais para o registro privado são myuser/mypasswd:

    docker run --entrypoint htpasswd httpd:2 -Bbn myuser mypasswd > auth/htpasswd
    
  3. Crie um segredo para montar os certificados (tipo secreto tls):

    kubectl create secret tls certs-secret --cert=/home/ubuntu/day42/registry/certs/tls.crt --key=/home/ubuntu/day42/registry/certs/tls.key
    
  4. Crie um segredo para autenticação:

    kubectl create secret generic auth-secret --from-file=/home/ubuntu/day42/registry/auth/htpasswd
    
  5. Crie o diretório local e aplique o PV PVC.

  6. Crie o pod de registro.

apiVersion: v1
kind: Pod
metadata:
  name: docker-registry-pod
  labels:
    app: registry
spec:
  containers:
  - name: registry
    image: registry:2.8.2
    volumeMounts:
    - name: repo-vol
      mountPath: "/var/lib/registry"
    - name: certs-vol
      mountPath: "/certs"
      readOnly: true
    - name: auth-vol
      mountPath: "/auth"
      readOnly: true
    env:
    - name: REGISTRY_AUTH
      value: "htpasswd"
    - name: REGISTRY_AUTH_HTPASSWD_REALM
      value: "Registry Realm"
    - name: REGISTRY_AUTH_HTPASSWD_PATH
      value: "/auth/htpasswd"
    - name: REGISTRY_HTTP_TLS_CERTIFICATE
      value: "/certs/tls.crt"
    - name: REGISTRY_HTTP_TLS_KEY
      value: "/certs/tls.key"
  volumes:
  - name: repo-vol
    persistentVolumeClaim:
      claimName: registry-pvc
  - name: certs-vol
    secret:
      secretName: certs-secret
  - name: auth-vol
    secret:
      secretName: auth-secret
  1. Crie o pod de serviço.

  2. Exporte as variáveis ​​de ambiente:

    export REGISTRY_NAME="my-registry"
    Master-->export REGISTRY_IP="10.100.175.12"
    # (Above IP is the NodePort service IP)
    
  3. Adicione a entrada abaixo a /etc/hoststodos os nós:

    10.100.175.12 my-registry
    
  4. Copie tls.crtpara /usr/local/share/ca-certificatestodos os nós e execute o seguinte comando:

    sudo update-ca-certificates 
    
  5. Tente fazer login no registro:

    docker login my-registry:5000 -u myuser -p mypasswd
    

Detalhes do erro

Error response from daemon: Get "https://my-registry:5000/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

Saída decrictl info

crictl info |grep -i tls
    "enableTLSStreaming": false,
      "tlsCertFile": "",
      "tlsKeyFile": ""
docker
  • 2 2 respostas
  • 4 Views

2 respostas

  • Voted
  1. Imran Premnawaz
    2024-08-01T18:45:00+08:002024-08-01T18:45:00+08:00

    Para certificados como os SSL, você precisa adicionar toda a cadeia de certificados no arquivo de certificado que você está usando com o nginx para executar o registro. Muitos sistemas operacionais não confiam nas CAs intermediárias , apenas na CA raiz, então você precisa preencher as etapas ausentes entre o certificado para seu host e a CA raiz que é confiável pelo SO .

    No e-mail que você recebeu seu certificado, você também deve encontrar links para as CAs intermediárias e a CA raiz. Abra o arquivo docker-registry.crt , role até o final e anexe as CAs intermediárias e, finalmente, o certificado da CA raiz para a cadeia PositiveSSL. Depois de fazer isso, reinicie o nginx. Agora você deve estar pronto para prosseguir.

    Observação: se você possui um nome de domínio, pode usar o Let's Encrypt para obter um certificado confiável sem custo algum.

    • 0
  2. Best Answer
    piyush sachdeva
    2024-08-01T19:14:02+08:002024-08-01T19:14:02+08:00

    Ufa! Depois de passar 3 dias com esse problema, finalmente descobri.

    Abaixo estão as etapas que tomei para corrigir o problema:

    Garanta que todos os nós confiem no certificado autoassinado:

    • Verifique se tls.crtfoi copiado para /usr/local/share/ca-certificatestodos os nós
    • Executar sudo update-ca-certificatesem cada nó.

    Configure o Docker para confiar no certificado autoassinado:

    O Docker precisa ser explicitamente configurado para confiar no seu certificado autoassinado. Você deve copiar o tls.crtpara o diretório de certificados confiáveis ​​do Docker.

        sudo mkdir -p /etc/docker/certs.d/my-registry:5000
        sudo cp /path/to/your/tls.crt /etc/docker/certs.d/my- 
        registry:5000/ca.crt
        
    

    Observação: substitua /path/to/your/tls.crt pelo caminho para seu arquivo tls.crt.

    Execute o docker login novamente

    docker login https://my-registry:5000 -u myuser -p mypasswd
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    • 0

relate perguntas

  • Ainda confuso por que o docker funciona quando você faz um processo ouvir 0.0.0.0, mas não 127.0.0.1

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