[k8s] Service 리소스 Overview (2) : Ingress와 Health check 공부/CLOUD
Date 2021. 8. 15. 17:34저번 글에 이어 Ingress와 Health check를 정리했다.
Ingress
- 쿠버네티스
Ingress리소스를 통해HTTP트래픽을 여러Service로 전달할 수 있다. - 우선 실제로 트래픽을 보고 처리해야 하는
Ingress Controller가 필요하다. 대표적으로 오픈소스 웹서버인nginx구현체인Nginx Ingress Controller가 존재한다. - https://kubernetes.io/ko/docs/concepts/services-networking/ingress-controllers/
- 구글의 쿠버네티스 서비스인
GKE는 자체적으로 구현한ingress-gce가 존재한다.
- 구글의 쿠버네티스 서비스인
- 접근하는 트래픽에 대해 어떻게 처리할지에 대해서 관리하는게 Ingress 리소스이다.
인그레스 컨트롤러
인그레스 리소스가 작동하려면, 클러스터는 실행 중인 인그레스 컨트롤러가 반드시 필요하다. kube-controller-manager 바이너리의 일부로 실행되는 컨트롤러의 다른 타입과 달리 인그레스 컨트롤러
kubernetes.io
metadata의annotations를 이용해 인그레스 오브젝트에 대한 옵션을 설정할 수 있다.nginx의 경우 nginx.ingress.kubernetes.io/rewrite-target 같은 옵션이 존재한다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-test
annotations:
...
spec:
rules:
- host: test.example.com
http:
paths:
- path: /test
backend:
service:
name: test
port:
number: 80
- 이
Ingress리소스의 경우Ingress Controller가 받는 트래픽 중- 요청의
Host헤더가test.example.com인 요청에 대해test서비스의80포트로 보내진다.
- 요청의
- 하나의
Ingress에 다양한rules와path를 사용할 수 있다.GCP에서 사용하는Cloud Load Balacer는url map이란 리소스가 해당 역할을 담당한다.- ingress-gce 레포에 pkg/loadbalancer/url_maps 로 확인할 수 있다.
Ingress TLS
Ingress Controller는 HTTPS 트래픽을 받아TLS Connection을 열고 백엔드에 위치한 서비스들에는HTTP트래픽으로 전송한다.(Terminate TLS)TLS연결에 사용되는 서버 인증서는 발급받은 뒤Secret리소스를 사용하여 저장할 수 있다.
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj \
CN=test.example.com
kubectl create secret tls tls-secret --cert=tls.cert --key=tls.key
- 또는
CSR을 생성해서CertificateSigningRequest리소스를 통해 발급받아도 된다고 한다.
kind: Ingress
...
spec:
tls:
- hosts:
- test.example.com
secretName: tls-secret
...
annotation 중 nginx.gress.kubernetes.io/ssl-redirect 기본값은 True 다. 즉 HTTP 로 요청을 보내도 tls 가 존재하면 HTTPS 로 리다이렉트한다.
Health check
Service의labelSelector에 맞는Pod들은 자동으로 서비스의Endpoint리소스로 등록된다. 하지만Pod가 생성된 뒤 Configuration이 필요하거나 등의 warm-up 절차가 있다면Service는 해당Pod로 요청을 보내서는 안될것이다. 이를 위해 Readiness Probe가 존재한다.
Readiness Probes
Pod가 클라이언트의 요청을 받아들일 수 있는지 확인하기 위해 존재한다.- 주기적으로 호출되어
Pod가 요청을 받을 수 있는지 확인한다. Container마다 요청을 받을 수 있다는 상태는 다르다. 쿠버네티스는 3가지 종류를 지원한다.- HTTP GET probe : 요청을 보내 HTTP Status code를 보고 확인한다.
- TCP Socket : 컨테이너의 특정 port로 소켓을 오픈한다. Established 면 Ready 상태.
- Exec probe : 컨테이너에서 프로세스를 실행해 Exit status code를 참조한다.
Liveness Probe와 달리 실패해도 Pod를 재시작하지는 않는다.
'공부 > CLOUD' 카테고리의 다른 글
| [GCP] Cloud Scheduler를 이용한 주기적 작업 실행 (0) | 2022.01.06 |
|---|---|
| Terraform 오버뷰 - GCP Cloud Run 배포하기 (0) | 2021.08.16 |
| [k8s] Service 리소스 Overview (1) (0) | 2021.08.14 |
| [GCP] Cloud Run CI/CD (0) | 2021.05.24 |
Recent Posts
Popular posts
Recent Comments
Tag List
운영체제 인가 JavaScript DNS 파이썬 DB 도커 네임스페이스 백준 인증 ORM API IAC JWT k8s 테라폼 TypeScript GCP 클라우드 알고리즘 리눅스 AWS 컨테이너 네트워크
Total :
Today :
Yesterday :
Blog powered by Tistory, Designed by hanarotg