반응형

Ingress Concept

‘호롤리’가 작성한 Ingress Gateway의 개념 설명과 실습 절차이다.
https://gruuuuu.github.io/cloud/k8s-service/#

 

Kubernetes Service & Ingress

1. Overview 이번 문서에서는 Kubernetes(k8s)의 Service와 Ingress에 대해서 알아보겠습니다. 2. Prerequisites 본문에서 사용한 spec : OS : CentOS v7.6 Arch : x86 k8s클러스터는 1마스터 2노드로 구성했습니다. Master : 4c

gruuuuu.github.io

 

위 블로그를 따라 해도 Ingress Gateway가 잘 동작하고, 아래와 같이 내가 만든 Practice YAML을 이용해도 Ingress Gateway가 잘 동작한다.

 

 

Practice

일반적인 준비 절차:

K8s cluster에 'ingress controller'가 동작 중인지 확인한다.

(만약 설치된 ingress controller가 없으면, nginx ingress controller를 설치할 것!)

$ kubectl get all -n ingress-nginx
NAME                                 READY   STATUS    RESTARTS   AGE
pod/ingress-nginx-controller-2bzz7   1/1     Running   0          6h23m
pod/ingress-nginx-controller-5rnw8   1/1     Running   0          6h23m
pod/ingress-nginx-controller-69jf2   1/1     Running   0          6h23m
pod/ingress-nginx-controller-j9nwr   1/1     Running   0          6h22m
pod/ingress-nginx-controller-xzc79   1/1     Running   0          6h22m

NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller   LoadBalancer   10.233.15.71   10.10.9.180   80:31302/TCP,443:31071/TCP   57d

NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
daemonset.apps/ingress-nginx-controller   5         5         5       5            5           kubernetes.io/os=linux   57d

가능하면, 위 예제처럼 service type이 ‘LoadBalancer’가 되도록하고, cluster 외부에서 직접 접속 가능한 주소를 할당한다. (예: 10.10.9.180)
위 예제대로라면, Cluster 밖에 있는 Web Browser는 80, 443 포트로 접속 가능하다.

 

 

Ingress Object 설정 및 생성

내 Pod에 접근할 수 있는 Ingress object를 생성한다.

아래와 같이 내 서비스에 접근할 수 있도록 Ingress manifest 파일을 작성한다.

##
## Filename: ingress.yaml
##
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mymusic
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: andrewapp.peter.space    # web browser에서 'http://andrewapp.peter.space/'로 요청이 들어온다면...
    http:
      paths:
      - path: /mymusic      # web browser에서 'http://.../mymusic/...' 로 요청이 들어온다면...
        backend:
          serviceName: andrewapp   # 'andrewapp'이름의 '80' 포트 서비스 Object로 패킷을 Forward한다.
          servicePort: 80

 

위에서 작성한 ingress.yaml을 kubernetes cluster에 적용한다.

$ kubectl apply  -n andrew  -f ingress.yaml

 

 

Example App을 이용한 테스트

Service manifest 파일을 생성한다.

##
## Filename: service.yaml
##
apiVersion: v1
kind: Service
metadata:
  name: andrewapp          # 이 값이 위 ingress에서 설정한 'serviceName: andrewapp'과 일치해야 한다.
spec:
  ports:
  - port: 80               # 이 값이 위 ingress에서 설정한 'servicePort: 80'과 일치해야 한다.
    protocol: TCP
    targetPort: 80
  selector:
    app: mymusic
  type: ClusterIP

 

위에서 작성한 yaml을 kubernetes cluster에 적용한다.

$ kubectl apply  -n andrew  -n service.yaml

 

실제 application이 돌아가는 예제 Web 서버를 구동한다.

##
## deploy.yaml
##
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mymusic
spec:
  selector:
    matchLabels:
      app: mymusic
  replicas: 1
  template:
    metadata:
      labels:
        app: mymusic           # service.yaml에서 사용한 selector 정보와 동일해야 한다.
    spec:
      containers:
      - name: mymusic
        image: nginx:1.14.2
        ports:
        - containerPort: 80

 

위에서 작성한 yaml을 kubernetes cluster에 적용한다.

$ kubectl apply  -n andrew  -n deploy.yaml

 

PC에서 Web browser로 접속한다.

주소는 ingress object에 설정했던 ‘andrewapp.peter.space/......’이다.

짜잔~~~  Web Page가 잘 보일 것이다.

+ Recent posts