DockerスタックをデプロイするGitLab CIパイプラインに取り組んでいます。 $ DOCKER_Hostをtcp://DROPLET_IP:2377
に設定しようとしていますが、証明書にIP SANが含まれていないというエラーが表示されます。私はDigital Ocean Dropletでテストしているので、まだ私の液滴のドメイン名を設定していません。
deploy:
stage: deploy
image: docker:stable
services:
- docker:dind
variables:
DOCKER_Host: "tcp://$DROPLET_IP:2377"
DOCKER_TLS_VERIFY: 1
before_script:
- mkdir -p ~/.docker
- echo "$TLS_CA_CERT" > ~/.docker/ca.pem
- echo "$TLS_CERT" > ~/.docker/cert.pem
- echo "$TLS_KEY" > ~/.docker/key.pem
script:
- docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY"
- docker info
- docker stack deploy --with-registry-auth --compose-file=docker-stack.yml mystack
これが、GitLab CIジョブの出力で発生するエラーです。
$ docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY"
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
error during connect: Post https://<ip-address>:2377/v1.39/auth: x509: cannot validate certificate for <ip-address> because it doesn't contain any IP SANs
上記のdeploy
ステージで使用しようとしている証明書(ca.pem
、server-cert.pem
およびserver-key.pem
)を生成するために、次のコマンドセットを使用しています。 GitLab CIで使用されている変数にTLS_CA_CERT
、TLS_CERT
、TLS_KEY
を保存しました。
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=<ip-address>" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = IP:<ip-address> >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
subjectAltName
にIPアドレスが含まれているようです
echo subjectAltName = IP:<ip-address> >> extfile.cnf
確認してください ここにあるように 、これが構成の問題である場合:
SubjectAltNameを間違ったセクションに配置しました。作業方法:基本的に、
openssl.cnf
を編集しました。セクション[v3_ca]
で、「subjectAltName = IP:192.168.2.107」を追加しました。
新しい証明書を作成し、サーバー+クライアントに追加しました。
拡張機能がv3_ca
部分で ここに表示 のように宣言されていることを確認する必要があります。