도커 버전 : 20.10.3
1. 인증서 관련
-정보는 주로 도메인 이름 (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 (공통 이름)
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를 사용하는 경우 (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 개 파일
둘째, 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
添加 : "안전하지 않은 레지스트리": [ "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
클라이언트는 왼쪽에 세 개의 파일이 필요합니다.
아이디어는 오른쪽 그림으로 이름을 바꾸는 것이 필수입니다.
연결 단어 : https://192.168.102.135:2375 (인증서 폴더 지정 필요)
k8s 설치 레지스트리
네임 스페이스 만들기 : 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