关于证书的介绍,创建自签证书、docker私有仓库构建、docker远程证书访问

docker版本:20.10.3

一、证书相关

-- 信息主要是指域名(ip)

单位

所需文件

证书主要内容(认证中心用秘钥对以下内容签名

服务器

服务器证书,秘钥

服务器基础信息、服务器公钥 + 认证中心信息

用户

认证中心证书

认证中心基础信息、认证中心公钥 + 认证中心信息

CA认证中心

秘钥

 

0.安装openssl工具

yum install -y openssl
yum install -y openssl-devel

1.创建两组公私秘钥

​​openssl genrsa用于生成RSA私钥,只有一个文件,因为公钥提取自私钥。

​​openssl rsa用于查看公钥。

-- 这里为了简单就不使用密码加密私钥了

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(Common Name)

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

-- CN直接用ip会有问题(it doesn't contain any IP SANs),所以加了关于ip的扩展信息

-- 域名的话,用DNS:域名

生成证书

openssl x509 -req -days 36500 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile extfile.cnf

开头的4个文件

二、部署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

-- 不写这两个,就是用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

三、配置docker远程访问

1.无条件允许访问

(1)修改配置文件:/lib/systemd/system/docker.service

搜索ExecStart,添加:-H tcp://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

客户端需要左图的三个文件,

而idea强制要求重命名为右图

连接字:https://192.168.102.135:2375 (需要指定证书文件夹)

k8s安装registry

创建命名空间:kubectl create namespace a-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