인증서 소개, 자체 서명 인증서 생성, 도커 개인 창고 구축, 도커 원격 인증서 액세스

도커 버전 : 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

추천

출처blog.csdn.net/u013595395/article/details/114279877