YJWANG

Nexus3 (Docker) + kuberenetes 본문

60.Cloud/80.Kubernetes

Nexus3 (Docker) + kuberenetes

왕영주 2020. 11. 25. 11:28

GUI로 config를 진행할 수 없다는 가정 하게 CLI로만 진행한다.
refer to
https://pypi.org/project/nexus3-cli/

nexus 세팅

nexus3 이미지 pull 및 실행

# docker run -d --net=host --name=nexus3 sonatype/nexus3

nexus3 admin default 암호 확인

# docker exec -it nexus3 cat /nexus-data/admin.password

nexus3 cli Download

# pip3 install nexus3-cli

nexus3 login
인증서는 사용하지 않을겁니다.

[root@wyj02_deploy_0 ~]# nexus3 login
Url [http://localhost:8081]:      
Username [admin]: admin
Password: 
X509 verify [Y/n]: n

Login successful.
Configuration saved to /root/.nexus-cli, /root/.nexus-cli.env

nexus3 cli allow
컨테이너 내부로 들어가 설정에서 cli로 작업할 수 있도록 합니다.

[root@wyj02_deploy_0 ~]# docker exec -it nexus3 /bin/bash
bash-4.4$ cat /nexus-data/etc/nexus.properties 
# Jetty section
# application-port=8081
# application-host=0.0.0.0
# nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
# nexus-context-path=/${NEXUS_CONTEXT}

# Nexus section
# nexus-edition=nexus-pro-edition
# nexus-features=\
#  nexus-pro-feature
# nexus.clustered=false
nexus.scripts.allowCreation=true

cli 동작 확인
default로 있는 repository들을 확인합니다.

[root@wyj02_deploy_0 ~]# nexus3 repository list
Name              Format   Type     URL                                             
nuget-group       nuget    group    http://localhost:8081/repository/nuget-group    
maven-snapshots   maven2   hosted   http://localhost:8081/repository/maven-snapshots
maven-central     maven2   proxy    http://localhost:8081/repository/maven-central  
nuget.org-proxy   nuget    proxy    http://localhost:8081/repository/nuget.org-proxy
maven-releases    maven2   hosted   http://localhost:8081/repository/maven-releases 
nuget-hosted      nuget    hosted   http://localhost:8081/repository/nuget-hosted   
maven-public      maven2   group    http://localhost:8081/repository/maven-public   

nexus3 docker regi 세팅

docker registry repository 생성

testregi2라는 v1 버전 api로도 접근 가능한 registry를 생성합니다. regi port는 8083입니다. (http)

[root@wyj02_deploy_0 ~]# nexus3 repository create hosted docker --v1-enabled  --http-port 8083 testregi2

docker로 login 할 수 있도록 DockerToken realm을 active 해줍니다.

[root@wyj02_deploy_0 ~]# nexus3 security realm activate DockerToken

연결 되나 테스트
!!물론 docker 실행하는 모든 node에서 insecure 설정선행돼야 합니다.

[root@wyj02_deploy_0 ~]# docker login http://localhost:8083
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

registry에 push 하기

임시로 준비했던 이미지를 push해봅니다.

[root@wyj02_deploy_0 ~]# docker tag test1 localhost:8083/test1

[root@wyj02_deploy_0 ~]# docker push localhost:8083/test1
The push refers to repository [localhost:8083/test1]
57f0870a74ff: Pushed 
c74375f55aa8: Pushed 
211b9be55a20: Pushed 
aa0b3e4b6d3b: Pushed 
540171a10c83: Pushed 
f5600c6330da: Pushed 
latest: digest: sha256:40224e87aa4c7e7bcccb474d7f772571931670e7b3a69ac21b3ee54ed77d192d size: 1573

nexus3에서 이미지가 검색되는지 확인합니다.

[root@wyj02_deploy_0 ~]# nexus3 list testregi2 
v2/test1/manifests/latest
v2/test2/manifests/latest
v2/test3/manifests/latest

kubernetes와 연동

docker login한 node에서 config설정을 확인합니다.

[root@wyj02_deploy_0 ~]# cat ~/.docker/config.json 
{
    "auths": {
        "localhost:8083": {
            "auth": "YWRtaW46MTU3ZDBkODItZTNkNC00NWJlLWFmZTEtOGRlNzExZjBmZjEy"
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.13 (linux)"
    }

kubernetes에서 secret을 생성합니다.
refer to : https://kubernetes.io/ko/docs/tasks/configure-pod-container/pull-image-private-registry/

[root@wyj02_deploy_0 ~]# kubectl create secret generic regi2 \
--from-file=.dockerconfigjson=./.docker/config.json \
--type=kubernetes.io/dockerconfigjson
secret/regi2 created

(참고) 모든 node에 insecure 옵션 복사_ansible

ansible -m copy -a 'src=/etc/docker/daemon.json dest=/etc/docker/' -i inventory/test/inventory.ini all
ansible -m shell -a 'systemctl restart docker' -i inventory/test/inventory.ini all
ansible -m shell -a 'docker info |grep 10.97.90.90' -i inventory/test/inventory.ini all

연동 테스트 (kubernetes + nexus3)

위에서 push한 이미지를 통해 pod를 생성해봅시다.
(sample manifest)

[root@wyj02_deploy_0 ~]# cat test1_pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test1
spec:
  containers:
  - name: test1
    image: 10.97.90.90:8083/test1
  imagePullSecrets:
  - name: regi2


[root@wyj02_deploy_0 ~]# kubectl apply -f test1_pod.yaml 
pod/test1 created
반응형