証明書の導入については、自己署名証明書の作成、Dockerプライベートウェアハウスの構築、Dockerリモート証明書へのアクセス

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.1025000 / 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.1352375  (証明書フォルダーを指定する必要があります)

 

 

 

 

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

おすすめ

転載: blog.csdn.net/u013595395/article/details/114279877