Dockerバージョン:20.10.3
1.証明書関連
-情報は主にドメイン名(ip)を参照しています
単位 |
必要なファイル |
証明書の主な内容(認証局は秘密鍵で次の内容に署名します) |
サーバ |
サーバー証明書、秘密鍵 |
サーバーの基本情報、サーバーの公開鍵+認証センターの情報 |
ユーザー |
認証局証明書 |
認証センターの基本情報、認証センターの公開鍵+認証センターの情報 |
CA認定センター |
秘钥 |
|
0.opensslツールをインストールします
yum install -y openssl
yum install -y openssl-devel
1.2セットの公開鍵と秘密鍵を作成します
OpensslgenrsaはRSA秘密鍵の生成に使用されます。公開鍵は秘密鍵から抽出されるため、ファイルは1つだけです。
Opensslrsaは公開鍵を表示するために使用されます。
-簡単にするために、秘密鍵はパスワードで暗号化されていません。
openssl genrsa -out ca-private-key.pem 4096
openssl rsa -in ca-private-key.pem -pubout -out ca-public-key.pem
認証センター:
openssl genrsa -out ca.key 4096
サーバ:
openssl genrsa -out server.key 4096
2.認証局の証明書(自己署名証明書、ルート証明書)を取得します
openssl req -new -x509 -subj "/CN=192.168.1.102" -days 36500 -key ca.key -out ca.crt
--subjは、認証センターの情報を参照します。CN=ドメイン名またはip(共通名)
3.サーバーの証明書を取得します
(1)最初に要求ファイル(サーバー情報とサーバー公開鍵を含む)を生成します
openssl req -new -subj "/CN=192.168.1.102" -key server.key -out server.csr
(2)証明書に再処理
証明書の追加情報
echo subjectAltName = IP:192.168.1.102,IP:0.0.0.0 >> extfile.cnf
-IPを直接使用するCN(IP SANが含まれていない)で問題が発生するため、IPに関する拡張情報が追加されます
-ドメイン名には、DNSを使用します:ドメイン名
証明書を生成する
openssl x509 -req -days 36500 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile extfile.cnf
最初の4つのファイル
2つ目は、Dockerプライベートウェアハウスをデプロイする
1.コンテナを実行します
docker run -itd --name hub \
-p 5000:5000 \
-v /a_soft/ca/hub:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/hub.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/hub.key \
--restart always \
registry
--cp server.crt ./hub/hub.crt
--cp server.key ./hub/hub.key
-REGISTRY_HTTP_ADDRのデフォルトは5000です
-テストアドレス:https://192.168.1.102:5000 / v2 / _catalog
-次の2つを記述せず、httpアクセスを使用してください:REGISTRY_HTTP_TLS_CERTIFICATEおよびREGISTRY_HTTP_TLS_KEY
2.構成関連
(1)クライアントはCAルート証明書を配置します
mkdir -p /etc/docker/certs.d/192.168.1.102:5000
cp ca.crt /etc/docker/certs.d/192.168.1.9:5000
-サフィックスは.crtである必要があります
(2)安全でない倉庫を許可する
構成ファイルを編集します:/etc/docker/daemon.json
追加: "insecure-registries":["192.168.1.102:5000"]
Dockerを再起動します
systemctl restart docker
3.テスト
docker pull lingtony/goweb
docker tag lingtony/goweb 192.168.1.102:5000/goweb:1.0
docker push 192.168.1.102:5000/goweb:1.0
3つ目は、Dockerリモートアクセスを構成する
1.無条件にアクセスを許可する
(1)構成ファイルを変更します:/lib/systemd/system/docker.service
ExecStartを検索し、次を追加します。-Htcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
(2)Dockerを再起動します
systemctl daemon-reload
systemctl restart docker
(3)テスト
接続ワード:tcp://192.168.102.135:2375
2.証明書の検証を追加します
(1)構成ファイルを変更します:/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock \
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
--tlsverify \
--tlscacert=/a_soft/ca/ca.crt \
--tlscert=/a_soft/ca/server.crt \
--tlskey=/a_soft/ca/server.key
(2)Dockerを再起動します
(3)クライアント証明書を生成する
-それがca.keyによって発行された証明書である限り(クライアント証明書としてca.crtを直接使用する場合でも)
openssl genrsa -out client.key 4096
openssl req -new -subj "/CN=client" -key client.key -out client.csr
openssl x509 -req -days 36500 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt
クライアントには、左側の3つのファイルが必要です。
アイデアは正しい写真に名前を変更する必要があります
接続ワード:https://192.168.102.135:2375 (証明書フォルダーを指定する必要があります)
k8sインストールレジストリ
名前空間を作成します。kubectlcreatenamespacea-env
ファイルを編集します:vi a-env-docker-hub.yml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-hub
namespace: a-env
spec:
selector:
matchLabels:
app: docker-hub
replicas: 1
template:
metadata:
labels:
app: docker-hub
spec:
# 限定为master节点
nodeName: master
containers:
- name: docker-hub
image: registry
imagePullPolicy: IfNotPresent
ports:
- name: hubssl
containerPort: 5000
protocol: TCP
env:
- name: REGISTRY_HTTP_ADDR
value: "0.0.0.0:5000"
- name: REGISTRY_HTTP_TLS_CERTIFICATE
value: "/certs/hub.crt"
- name: REGISTRY_HTTP_TLS_KEY
value: "/certs/hub.key"
volumeMounts:
- name: data
mountPath: /var/lib/registry
- name: certs
mountPath: /certs
restartPolicy: Always
volumes:
- name: data
hostPath:
path: /a_soft/docker-hub/data
type: DirectoryOrCreate
- name: conf
hostPath:
path: /a_soft/docker-hub/conf
type: DirectoryOrCreate
- name: certs
hostPath:
path: /a_soft/ca/docker-hub
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: docker-hub
namespace: a-env
spec:
selector:
app: docker-hub
ports:
- name: hubssl
targetPort: hubssl
protocol: TCP
port: 5000
nodePort: 5000
type: NodePort
アプリケーションファイル:kubectl apply -f a-env-docker-hub.yml
カタログ:https://blog.csdn.net/u013595395/article/details/114527658