$ kubectl get all -n nexus
NAME READY STATUS RESTARTS AGE
pod/nexus-5d4d77f854-hqzw9 1/1 Running 0 8h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nexus-service NodePort 172.20.124.79 <none> 8081:32000/TCP 29h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nexus 1/1 1 1 29h
NAME DESIRED CURRENT READY AGE
replicaset.apps/nexus-5d4d77f854 1 1 1 8h
replicaset.apps/nexus-98664b57c 0 0 0 29h
admin page에서 repository 생성 ('Create repository' 클릭)
docker (hosted)
5000
으로 설정)이 때 docker login을 그냥 docker login https://nexus.mydomain.com/repositry/registry
과 같이 하면 다음과 같은 에러가 발생함
$ docker login registry.mydomain.com
Username: admin
Password:
Error response from daemon: login attempt to https://nexus.mydomain.com/v2/ failed with status: 404 Not Found
registry 포트 (ex. 5000)를 위한 domain을 따로 생성해야 하기 때문에 이를 위한 service와 ingress를 추가로 생성해 줘야 함
Service는 새로 생성 or 기존 Service를 edit 하는 방식 중 선택
service.yaml
배포
apiVersion: v1
kind: Service
metadata:
annotations:
name: registry-service
namespace: nexus
spec:
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: web
port: 5000
protocol: TCP
targetPort: 5000
selector:
app: nexus-server
sessionAffinity: None
type: NodePort
kubectl edit svc nexus-service -n nexus -o yaml
로 기존 Nexus Service 수정
...
spec:
...
ports:
- name: web
nodePort: 32000
port: 8081
protocol: TCP
targetPort: 8081
- name: docker-registry # 추가
nodePort: 32001
port: 5000
protocol: TCP
targetPort: 5000
ingress.yaml
배포
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: nexus
name: nexus-registry-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/load-balancer-name: <생성할_LB_NAME>
alb.ingress.kubernetes.io/subnets: <SUBNET_ID_1>,<SUBNET_ID_2>0f270c23469d3d818
alb.ingress.kubernetes.io/group.name: <GROUP_NAME>
# SSL Settings
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<REGION-CODE>:<ACCOUNT_ID>:certificate/<CERTIFICATE_ID>
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: '443'
spec:
rules:
- host: registry.mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: registry-service # Case 1 (Case 2의 경우는 'nexus-service'로 입력)
port:
number: 5000
배포한 리소스 생성 확인
$ kubectl get all -n nexus
NAME READY STATUS RESTARTS AGE
pod/nexus-9b9f54dcb-gb9qw 1/1 Running 0 62m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/registry-service. NodePort 172.20.151.43 <none> 5000:31786/TCP 54m
service/nexus-service NodePort 172.20.124.79 <none> 8081:32000/TCP 31h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nexus 1/1 1 1 31h
NAME DESIRED CURRENT READY AGE
replicaset.apps/nexus-5d4d77f854 0 0 0 10h
replicaset.apps/nexus-98664b57c 0 0 0 31h
replicaset.apps/nexus-9b9f54dcb 1 1 1 62m
$ kubectl get ingress -n nexus
NAME CLASS HOSTS ADDRESS PORTS AGE
nexus-registry-ingress <none> registry.mydomain.com <ALB_DNS> 80 52m
nexus-web-ingress <none> nexus.mydomain.com <ALB_DNS> 80 3h
위와 같이 registry port로 설정한 5000번 포트 사용을 위한 Service, Ingress 생성 후 docker login
시 아래와 같은 에러가 발생함
$ docker login registry.mydomain.com
Username: admin
Password:
Error response from daemon: login attempt to https://registry.mydomain.com/v2/ failed with status: 401 Unauthorized
아래와 같이 Nexus admin page > Realms > 'Docker Bearer Token Realms'를 Active 쪽으로 이동 > Save 클릭한 뒤 docker login
시 정상적으로 로그인되는 것을 확인할 수 있음
로그인 결과 확인
docker login registry.mydomain.com
Username: admin
Password:
Login Succeeded
개인적으로 공부하며 작성한 글로, 내용에 오류가 있을 수 있습니다.