过滤器链检查
한국어 원문으로 표시합니다.
server_names 조건을 적었는데 어떤 연결에도 맞지 않는다. 가장 먼저 확인할 것은?
- 체인을 목록의 맨 위로 올렸는지
- 리스너에
tls_inspector리스너 필터가 켜져 있는지 - 인증서의 CN 과
server_names값이 같은지 transport_socket에alpn_protocols가 적혀 있는지
server_names: ["a.example.com"] 만 적은 체인과 application_protocols: ["h2"] 만 적은 체인이 있다. a.example.com 으로 HTTP/2 요청이 오면 어느 체인이 받는가?
- ALPN 쪽 — 프로토콜 조건이 이름 조건보다 뒤에 평가되어 마지막에 남는다
- 설정 파일에서 먼저 쓴 쪽 — 같은 순위일 때는 순서가 정한다
- SNI 쪽 — 좁히는 순서에서 서버 이름이 애플리케이션 프로토콜보다 앞이다
- 둘 다 맞으므로 Envoy 가 설정을 거절해 리스너가 뜨지 않는다
새 도메인을 붙였더니 그 도메인만 응답 코드도 없이 연결이 끊긴다. 가장 그럴듯한 원인은?
- 업스트림 클러스터에 성한 엔드포인트가 하나도 없다
- 라우트 표의
domains에 그 이름을 넣지 않아 가상 호스트를 못 찾았다 - 인증서 만료일이 지나 TLS 세션이 즉시 종료됐다
- 맞는 필터 체인이 없어 HTTP 계층까지 가기 전에 연결이 닫혔다
한 포트에서 평문 HTTP 와 TLS 를 함께 받으려면 필요한 것은?
transport_protocol: "raw_buffer"로 맞는 체인을 하나 더 두고 인스펙터를 켠다- 리스너를 두 개 만들어 같은 포트에 각각 바인드한다
codec_type을 AUTO 로 두어 코덱이 평문을 자동 인식하게 한다transport_socket의require_client_certificate를 false 로 둔다
SNI 가 www.example.com 일 때 아래 네 체인 중 선택되는 것은?
server_names를 적지 않은 체인server_names: ["*.com"]인 체인server_names: ["*.example.com"]인 체인server_names: ["www.example.com"]인 체인
리스너 필터(listener_filters)와 네트워크 필터(filter_chains[].filters)의 차이로 맞는 것은?
- 리스너 필터는 체인이 정해진 뒤에 돌고, 네트워크 필터는 그 앞에서 돈다
- 리스너 필터는 체인을 고르기 전에 연결의 성질을 읽어 두고, 네트워크 필터는 고른 뒤 실제 처리를 한다
- 리스너 필터는 HTTP 요청마다 돌고, 네트워크 필터는 연결마다 한 번 돈다
- 리스너 필터는 TLS 를 복호화하고, 네트워크 필터는 평문만 다룬다