08. Ingress 생성

루다소프트·2019년 12월 10일
1

1. YAML 파일 가져오기

사전에 작성해 둔 YAML 파일들을 가져옵니다.

git clone https://github.com/rudasoft/pipeline.git
cd pipeline

2. LoadBalancer Service 삭제

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

3. NodePort Service 생성

Ingress Controller 와 docker registry 및 jenkins 연결을 위해, NodePort 형태의 서비스를 생성하겠습니다.

kubectl apply -f docker-registry-svc.yaml
kubectl apply -f jenkins-svc.yaml
  • docker-registry-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 포트로 연결하고 있습니다.

4. Ingress 생성

kubectl apply -f pipeline-ing.yaml
  • pipeline-ing.yaml.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: /

설정한 환경에 맞도록 도메인 등을 수정하여 적용합니다.

5. 테스트

  • registry.pipeline.internal
    docker login, push, pull 등을 테스트 합니다.
  • jenkins.pipeline.internal
    웹 브라우져에서 접속하여 테스트합니다.
profile
루다소프트 기술 블로그입니다.

0개의 댓글