쿠버네티스(kubernetes)

쿠버네티스 Ingress와 Service 사용하기

토끼C 2024. 6. 24. 18:29
반응형

Ingress는 Kubernetes에서 외부로부터의 네트워크 트래픽을 관리하고 클러스터 내의 서비스로 라우팅하는 역할을 한다. 이러한 Ingress 리소스에 정의된 규칙을 실제로 적용하려면 Ingress Controller를 사용해야 한다.

 

1. 용어 정의

  1. Ingress:
    • 역할: 클러스터 외부에서 내부로의 HTTP 및 HTTPS 트래픽을 관리하는 API 객체이다.
    • 설명: Ingress는 클러스터 내의 서비스에 대한 외부 접근을 정의한다. 특히, Ingress는 도메인 이름, 경로 및 서비스를 매핑하는 데 사용된다. 클러스터 외부에서 어떻게 트래픽을 라우팅할지를 결정하는 데 사용된다.
  2. Service:
    • 역할: 논리적으로 일관된 서비스 엔드포인트를 제공하는 Kubernetes 오브젝트이다.
    • 설명: Service는 Pod 집합을 하나의 논리적인 엔드포인트로 묶어주는 역할을 한다. 이를 통해 다른 Pod나 외부에서 이 서비스에 액세스할 수 있다.
  3. Ingress Controller:
    • 역할: Ingress 리소스를 실제로 처리하고 트래픽을 Pod로 라우팅하는 컴포넌트이다.
    • 설명: Ingress Controller는 클러스터에서 Ingress 리소스를 감시하고, 정의된 규칙에 따라 트래픽을 서비스 또는 Pod로 라우팅한다. 예를 들어, NGINX Ingress Controller는 HTTP 및 HTTPS 트래픽을 관리하고 Ingress 리소스에 정의된 경로 및 호스트 기반의 규칙을 따라 트래픽을 적절한 서비스로 전달한다.

 

2. Ingress의 동작 구조

                             +---------------------------------------------+
                             |                                             |
                             |   +--------v------+     +-------v--------+  |
                             |   |     Service   |     |      POD       |  |
                             |   | (test-service)+---->|   (10.0.0.2)   |  |
                             |   |       80      |     |   Port: 8081   |  |
                             |   +---------------+     +----------------+  |
                             |               ↑            |                |
                             |               |            |                |
                             |            +------------------+             |
                             |            | Ingress Resource |             |
                             |            |  (domain.name)   |             |
                             |            +------------------+             |
                             |                     |                       |
                             |                     |                       |
                             |          +----------|----------+            |
                             |          |          |          |            |
                             |          |          |          |            |
+-------------------+        |        +------------------------+           |
|       Client      |        |        |                        |           |
| domain.name:31108 +-------->        |   ingress controller   |           |
|   (http request)  |        |        |                        |           |
+-------------------+        |        +------------------------+           |
                             |                                             |
                             +---------------------------------------------+

 

 

3. Ingress Controller 설치 방법

참고 https://www.skyer9.pe.kr/wordpress/?p=6780

 

Kubernetes – ingress-nginx 설치 – 상구리의 기술 블로그

Kubernetes – ingress-nginx 설치 service 외부 노출을 위한 ingress-nginx 를 설치합니다. ingress 설치 git clone https://github.com/kubernetes/ingress-nginx.git cd ./ingress-nginx/deploy/static/provider/baremetal # kubectl apply -f . kubectl

www.skyer9.pe.kr

 

  1. nginx ingress 관련 리소스 배포
    $ kubectl apply -f deploy.yaml
  2. 배포 리소스 확인
    $ kubectl get all -n ingress-ngingx
  3. http 포트 확인 (31108)

4. Ingress, Service 리소스 생성 방법

  1. service:
    • Service의 정보이다.
    • apiVersion: v1
      kind: Service
      metadata:
        name: nexus-service
      spec:
        selector:
          app: nexus
        ports:
          - protocol: TCP
            port: 80 #서비스의 80 포트로 요청이 들어오면
            targetPort: 8081 #서비스는 이를 컨테이너의 8081 포트로 전달한다.
  2. ingress:
    • ingress의 정보이다.
    • apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: nexus-ingress
        annotations:
          kubernetes.io/ingress.class: "nginx"
      spec:
        rules:
        - host: domain.name #domain.name 으로 들어오는 요청을 처리한다.
          http:
            paths:
            - path: / #모든 경로를 해당 백엔드 서비스로 전달
              pathType: Prefix
              backend: #위의 정보에서 들어온 요청이 전달될 백엔드 서비스를 지정한다.
                service: #nexus-service의 80포트로 연결한다.
                  name: nexus-service
                  port:
                    number: 80

5. DNS를 사용하여 외부에서 요청 보내기

  1. host 파일 수정리눅스 : /etc/hosts
    윈도우 : C:\Windows\System32\drivers\etc\hosts
  2. hosts 파일에 DNS 정보 추가
    ex) 192.168.0.0 domain.name
  3. 요청 url
    domain.name:31108

 

반응형