kubernetes ArgoCD使用自签名证书

yzuktlbb  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(2)|浏览(268)

出于测试目的,我使用自签名证书部署了一个不安全的nexus注册表。
1.我已经使用这个cheat-sheet创建了rootCA、证书和签名。
1.我已经更新了主机中的证书

root@master:~/cert2# sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

1.我已经将证书添加到nginx,它充当nexus的代理:

root@mec5g:~/minidevops# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS
                           NAMES
720b50c77f24   nginx:1.18.0             "/docker-entrypoint.…"   47 minutes ago   Up 47 minutes   80/tcp, 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:8585->8081/tcp, :::8585->8081/tcp, 0.0.0.0:8586->8082/tcp, :::8586->8082/tcp   minidevops_nginx_1
e6712602b614   sonatype/nexus3:3.37.0   "sh -c ${SONATYPE_DI…"   47 minutes ago   Up 47 minutes   0.0.0.0:32768->8081/tcp, :::32768->8081/tcp
                           minidevops_nexus_1
  1. nexus可以像helm repositorydocker registry一样正常运行:
    第一节第一节第一节第一节第一次
    1.将证书添加到ArgoCD

  1. helm repository包括:

1.应用程序已部署:

但是,“证书由未知机构签名”错误仍然存在。

有线索吗?
请注意,此问题与已发布的另一个问题相关,但不相同:questions/75898641

更新2023-04-01

我已经按照建议的步骤操作了,但错误仍然存在:
1.我已经将pem转换为crt扩展:openssl x509 -outform der -in ca-cert.pem -out ca-cert.crt
1.我还更新了CA证书:

usuario@mec5g:~/cert3$ sudo dpkg-reconfigure ca-certificates
Updating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
rehash: warning: skipping ca-cert.pem,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
Processing triggers for ca-certificates (20211016ubuntu0.20.04.1) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

1.我试着测试证书,得到了这个答案(我已经删除了其余的加密材料):

root@master:~/cert3# openssl s_client -connect 10.63.27.49:8585 -showcerts </dev/null
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN = 10.63.27.49
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = 10.63.27.49
verify error:num=21:unable to verify the first certificate
verify return:1
...
...
...

更新2023-04-02.1

1.我遵循了docker documentation中关于使用自签名证书的建议:

sudo mkdir -p /etc/docker/certs.d/10.63.27.49:6000/
sudo cp ca-cert.crt /etc/docker/certs.d/10.63.27.49\:6000/ca.crt

1.我现在可以在Nexus注册表中登录Docker:

usuario@mec5g:~/cert2$ docker login 10.63.27.49:6000 -u xxx -p xxx
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/usuario/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  1. ArgoCD中的错误现在不同了:

更新2023-04-02.2

1.我在argocd命名空间中添加了一个secret:

root@master:~# kubectl create secret docker-registry regcred -n argocd --docker-username=xxx --docker-password=xxx --docker-server=10.63.27.49:6000
secret/regcred created

1.我在helmchart部署文件中添加了一个标记:

spec:
  imagePullSecrets:
    - name: regcred

错误仍然存在。

bprjcwpo

bprjcwpo1#

如果证书是自签名的,则需要将其添加到主机的根CA。
如果你不知道怎么做,看看这里:https://unix.stackexchange.com/questions/90450/adding-a-self-signed-certificate-to-the-trusted-list

6ss1mwsb

6ss1mwsb2#

根据ArgoCD的建议:issue-6048
“Argo CD使用一种证书固定-这意味着,每个证书都固定到存储库服务器的名称,并且必须相应地配置。配置的证书中的CN是不相关的,只要它可以用来验证服务器的证书(例如,当您提供CA证书来验证TLS连接时)。相关的是远程服务器提供的证书-这需要使用实际标识服务器的SAN进行正确设置(例如,通过SAN扩展DNS:)。其中一个SAN条目必须与用于连接的服务器的名称匹配。
1.我使用了详细的SAN来创建自签名证书。例如:subjectAltName=DNS:10.63.27.49,DNS:localhost,DNS:mec5g.es,DNS:master,IP:10.63.27.49,IP:127.0.0.1,IP:10.5.0.2"
1.我已将证书添加到/ca-certificates文件夹。例如:

sudo cp ca-cert.crt /usr/share/ca-certificates/
sudo cp server-cert.crt /usr/share/ca-certificates/

1.我已经将根CA添加到docker/cert.d/文件夹。例如:

sudo mkdir -p /etc/docker/certs.d/10.63.27.49:7000/
sudo cp ca-cert.crt /etc/docker/certs.d/10.63.27.49:7000/ca.crt

1.我修改了daemon.json文件。例如:

sudo nano /etc/docker/daemon.json

  {
    "insecure-registries" : ["10.63.27.49:7000"]
  }

1.我在ArgoCD命名空间中添加了一个secret。例如:

kubectl create secret docker-registry regcred -n argocd --docker-username=xxx --docker-password=xxx --docker-server=10.63.27.49:7000

1.我在helmchart部署文件中添加了一个标签。例如:

imagePullSecrets:
    - name: regcred

相关问题