반응형
Ingress는 Kubernetes에서 외부로부터의 네트워크 트래픽을 관리하고 클러스터 내의 서비스로 라우팅하는 역할을 한다. 이러한 Ingress 리소스에 정의된 규칙을 실제로 적용하려면 Ingress Controller를 사용해야 한다.
1. 용어 정의
- Ingress:
- 역할: 클러스터 외부에서 내부로의 HTTP 및 HTTPS 트래픽을 관리하는 API 객체이다.
- 설명: Ingress는 클러스터 내의 서비스에 대한 외부 접근을 정의한다. 특히, Ingress는 도메인 이름, 경로 및 서비스를 매핑하는 데 사용된다. 클러스터 외부에서 어떻게 트래픽을 라우팅할지를 결정하는 데 사용된다.
- Service:
- 역할: 논리적으로 일관된 서비스 엔드포인트를 제공하는 Kubernetes 오브젝트이다.
- 설명: Service는 Pod 집합을 하나의 논리적인 엔드포인트로 묶어주는 역할을 한다. 이를 통해 다른 Pod나 외부에서 이 서비스에 액세스할 수 있다.
- 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
- nginx ingress 관련 리소스 배포
$ kubectl apply -f deploy.yaml - 배포 리소스 확인
$ kubectl get all -n ingress-ngingx - http 포트 확인 (31108)
4. Ingress, Service 리소스 생성 방법
- service:
- Service의 정보이다.
-
apiVersion: v1 kind: Service metadata: name: nexus-service spec: selector: app: nexus ports: - protocol: TCP port: 80 #서비스의 80 포트로 요청이 들어오면 targetPort: 8081 #서비스는 이를 컨테이너의 8081 포트로 전달한다.
- 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를 사용하여 외부에서 요청 보내기
- host 파일 수정리눅스 : /etc/hosts
윈도우 : C:\Windows\System32\drivers\etc\hosts - hosts 파일에 DNS 정보 추가
ex) 192.168.0.0 domain.name - 요청 url
domain.name:31108
반응형
'쿠버네티스(kubernetes)' 카테고리의 다른 글
쿠버네티스 kubectl 명령어 자동완성 설정하기 (0) | 2025.02.05 |
---|---|
Failed to pull image with x509 ImagePullBackOff 해결하기 - CRIO (0) | 2024.12.11 |
컨테이너 생성시, 컨테이너가 Terminated 상태가 되는 현상(with 커스텀 이미지) (1) | 2024.06.24 |
쿠버네티스 Secret 사용방법 (0) | 2024.06.24 |