7.4. 클러스터 인증서
어떨 때 보는가
- 정기 점검에서 인증서 만료를 확인할 때
- 클러스터 접속이 갑자기 되지 않을 때
- 클러스터를 설치하고 1년이 가까워질 때
클러스터 인증서란
Kubernetes 구성요소끼리 통신할 때 쓰는 인증서입니다.
클러스터 안에서는 여러 프로그램이 서로를 부릅니다. kubelet 이 API 서버를, API 서버가 etcd 를, 컨트롤러가 API 서버를 부릅니다. 이 통신은 모두 암호화되고 상호 인증 됩니다. 아무 프로그램이나 API 서버에 명령을 내릴 수 없어야 하기 때문입니다.
그 인증에 쓰는 것이 클러스터 인증서입니다.
| 인증서 | 쓰는 곳 |
|---|---|
| API 서버 | 다른 구성요소가 API 서버를 신뢰하는 근거 |
| kubelet | API 서버가 각 노드를 신뢰하는 근거 |
| etcd | 데이터 저장소 접근 인증 |
| 컨트롤러·스케줄러 | API 서버에 접속할 때의 신분 |
이 인증서들은 클러스터를 설치할 때 자동으로 만들어지고, 각 노드의 파일로 보관됩니다.
애플리케이션 인증서와 무엇이 다른가
7.3 장의 cert-manager 인증서와 목적이 다릅니다.
| 클러스터 인증서 | 애플리케이션 인증서 | |
|---|---|---|
| 쓰는 곳 | Kubernetes 구성요소끼리 | 사용자 브라우저와 서비스 사이 |
| 만드는 주체 | 클러스터 설치 도구 | cert-manager |
| 저장 위치 | 노드의 파일 | 클러스터의 Secret |
| 갱신 | 운영 담당자가 수행 | 자동 |
| 만료되면 | 클러스터가 멈춥니다 | 브라우저 경고가 뜹니다 |
만료 결과가 다릅니다. 애플리케이션 인증서가 만료되면 접속에 경고가 뜨지만 서비스는 돌아갑니다. 클러스터 인증서가 만료되면 구성요소끼리 통신이 끊겨 클러스터가 동작을 멈춥니다.
인증서가 만료되면 무슨 일이 생기는가
한꺼번에 모든 것이 멈추지는 않습니다. 단계적으로 나타납니다.
| 증상 | 뜻 |
|---|---|
| Console 접속이 안 됨 | API 서버 인증서 문제 |
노드가 NotReady 로 바뀜 | kubelet 인증서 문제 |
| 배포가 반영되지 않음 | 컨트롤러가 API 서버에 접속하지 못함 |
| 이미 떠 있는 파드는 계속 동작 | 파드 실행 자체는 인증서와 무관합니다 |
마지막 항목이 중요합니다. 인증서가 만료돼도 이미 도는 애플리케이션은 계속 동작합니다. 새 배포나 재시작이 안 될 뿐입니다.
그래서 알아채기 어렵고, 파드가 종료되는 순간 복구되지 않아 장애가 됩니다. 증상이 없을 때 확인해 두어야 하는 이유 입니다.
콘솔이 인증서 정보를 가져오는 방법
인증서는 클러스터 API 가 아니라 각 노드의 파일 로 보관됩니다. 그래서 Console 이 API 를 불러 읽을 수 없습니다.
COP 는 이를 위해 모든 노드에 인증서 읽기 도구 를 하나씩 띄워 둡니다. Console 은 그 도구에 물어 각 노드의 인증서 정보를 모읍니다.
| 알아 둘 것 | 설명 |
|---|---|
| 노드마다 조회 | 노드 수만큼 요청이 나갑니다. 노드가 많으면 목록이 뜨는 데 시간이 걸립니다 |
| 일부 노드 실패 가능 | 한 노드가 응답하지 않아도 나머지는 표시됩니다 |
| 읽기 전용 | 이 화면은 조회만 합니다. 갱신 기능은 없습니다 |