사전에 작성해 둔 YAML 파일들을 가져옵니다.
git clone https://github.com/rudasoft/pipeline.git
cd pipeline
Ingress Controller 와 Ingress 를 통해 외부의 요청을 처리하도록 설정하기 위해서 docker-registry, jenkins 설치 시, 외부와의 연결을 위해 생성하였던 LoadBalancer 유형의 서비스를 삭제합니다.
pipeline namespace 에 생성된 서비스를 확인합니다.
kubectl get svc --namespace=pipeline
LoadBalancer 유형의 서비스가 아래와 같이 확인되어야 합니다.
docker-registry-svc LoadBalancer
jenkins-svc LoadBalancer
nginx-ingress-controller LoadBalancer
외부의 요청을 nginx-ingress-controller(80, 443 포트)를 통해서만 처리하기 위해서 docker-registry-svc (5000 포트), jenkins-svc(8080 포트) 를 삭제합니다.
kubectl delete svc docker-registry-svc --namespace=pipeline
kubectl delete svc jenkins-svc --namespace=pipeline
Ingress Controller 와 docker registry 및 jenkins 연결을 위해, NodePort 형태의 서비스를 생성하겠습니다.
kubectl apply -f docker-registry-svc.yaml
kubectl apply -f jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: docker-registry
name: registry-svc
namespace: pipeline
spec:
type: NodePort
selector:
app: docker-registry
release: docker-registry
ports:
- name: registry-http
port: 80
protocol: TCP
targetPort: 5000
- name: registry-https
port: 443
protocol: TCP
targetPort: 5000
Ingress Controller 로 부터 Service에 오는 80, 443 포트의 요청을 target Pod 의 5000 포트로 연결하고 있습니다.
kubectl apply -f pipeline-ing.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: pipeline-ing
namespace: pipeline
spec:
tls:
- hosts:
- pipeline.internal
secretName: pipeline-tls-secret
rules:
- host: registry.pipeline.internal
http:
paths:
- backend:
serviceName: docker-registry-svc
servicePort: 80
path: /
- host: jenkins.pipeline.internal
http:
paths:
- backend:
serviceName: jenkins-svc
servicePort: 80
path: /
설정한 환경에 맞도록 도메인 등을 수정하여 적용합니다.