8.1 인그레스의 개념
클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙 모음
외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL 인증서 처리, 도메인 기반 가상 호스팅 제공
실제로 동작시키는 것은 인그레스 컨트롤러
직접 인그레스에 인그레스 컨트롤러(ingress-nginx)를 연동해야 함
- Metadata.annotations : 인그레스 설정시 사용하는 필드. 하위필드의 설정은 컨트롤러에 따라 다름.
- spec.rules[] : 규칙 지정하기
host : 요청받을 주소
http.paths[] : 경로
backend.serviceName : 처리할 서비스의 이름
backend.servicePort : 서비스 포트
8.2 ingress-nginx 컨트롤러
인그레스는 설정일 뿐이고 설정 내용대로 동작하는 실제 주체는 인그레스 컨트롤러.
공식 컨트롤러는 구글 컴퓨트 엔진용 ‘ingress-gce’와 nginx용 ‘ingress-nginx’
8.3 인그레스 SSL 설정하기
인그레스를 이용하면 요청으로 들어오는 트래픽에 다양한 설정 가능
인그레스로 SSL인증서를 설정하면 파드 각각에 SSL 설정을 따로 할 필요가 없음.
인증서 기한이 만료됐을 때도 인그레스에서만 인증서를 업데이트 하면 됨.
CA에 인증서 발급 요청시 서명된 인증서를 발급해줌.
발급받은 인증서를 서버에 설정하여 웹 브라우저에서 통신할 때 유효한 인증서인지 확인한 후 SSL 통신함.
<openssl로 직접 인증서 만들어 SSL 통신하기>
- CA의 비밀키, 인증서 만들기
‘ openssl req -x509 -nodes -days 365 -newkey rasa:2048 -keyout tls.key -out tls.crt -subj “————“ ‘
=> tls.key, tls.crt 생성됨 - 인증서용 시크릿 생성
시크릿은 보안이 필요한 설정들을 다룰 때 사용함
‘kubectl create secret tls “이름“ —key tls.key —cert tls.crt’ - 시크릿을 인그레스에 적용
- spec.tls[].hosts[] : (접속 허용할) 호스트 네임 지정해주기
- spec.tls[].secretName 필드에 시크릿 이름을 적어줌
8.4 무중단 배포를 할 때 주의할 점
새로운 버전의 컨테이너 배포시 요청받을 파드를 교체해야 함.
이때 새로운 파드를 생성시키고 헬스 체크가 성공한 후 트래픽을 v2쪽으로 보냄.
기존의 트래픽 흐름은 중단시키고 v1을 제거함. 단 주의사항 있음
- maxSurge와 maxUnavailable 필드 설정
maxSurge : 디플로이먼트에 설정된 기본 파드 개수에 여분의 파드를 몇 개 더 추가할 수 있는지 설정할 수 있음
maxUnavailable : 디플로이먼트를 업데이트하는 동안 몇 개의 파드를 이용할 수 없어도 되는지 설정
적절히 조절하여 일정 개수 이상의 파드를 이용하도록 함. - 파드가 readinessProbe를 지원하는지 확인
- readinessProbe
실제로 컨테이너가 서비스 요청을 처리할 준비가 되었는지 진단. - livenessProbe
컨테이너가 정상 실행되는지 점검해서 정상 실행상태가 아니면 kubelet에서 실행 중단 시킴
만약 readinessProbe를 사용하기 어려운 환경이라면 spec.minReadySeconds 필드를 사용함
spec.minReadySeconds 필드는 파드가 준비 상태일 때까지의 최소 대기시간을 정함. 이 시간동안은 요청 안받음
3. 쿠버네티스와 컨테이너 안에 그레이스풀 종료 설정
kubelet은 파드 종료 시 SIGTERM 신호를 먼저 보냄.
무중단 배포시에는 SIGTERM 신호를 받으면 기존의 받은 요청만 처리하고 새 요청을 받지 않는 그레이스풀 종료가 설정되어야 함.
만약 SIGTERM 신호를 보낸 후 일정 시간동안 그레이스풀 종료가 되지 않으면 강제로 SIGKILL 신호를 보내서 파드를 종료함.
- .terminationGracePeriodSeconds : 종료 대기시간 설정
만약 그레이스풀을 사용하지 못하는 환경이면 프리스톱 훅을 이용하면 됨.
파드의 생명주기 중 훅을 설정할 수 있음. 프리스톱 훅은 파드가 종료되기 직전에 실행됨.
'DevOps > Kubernetes' 카테고리의 다른 글
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter10. 컨피그맵 (0) | 2021.07.21 |
---|---|
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter09. 레이블과 애너테이션 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter07. 서비스 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter06. 컨트롤러 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] 5. 파드 (0) | 2021.07.21 |