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