Raft와 TLS를 사용한 HA 클러스터
Raft와 TLS를 사용한 HA 클러스터
통합 스토리지와 TLS의 개요는 TLS 검증 경고를 완화하고 Raft 클러스터를 부트스트래핑하는 다양한 옵션을 다룹니다.
제대로 구성하지 않으면 클러스터 초기화 전에 다음 경고가 표시됩니다.
core: join attempt failed: error="error during raft bootstrap init call: Put \"https://vault-${N}.${SERVICE}:8200/v1/sys/storage/raft/bootstrap/challenge\": x509: certificate is valid for ${SERVICE}, ${SERVICE}.${NAMESPACE}, ${SERVICE}.${NAMESPACE}.svc, ${SERVICE}.${NAMESPACE}.svc.cluster.local, not vault-${N}.${SERVICE}"
아래 예시는 두 가지 구체적인 해결책을 보여줍니다. 두 해결책 모두 Raft 스탠자의 leader_api_addr에 사용되는 공통 이름(CN)이 TLS 인증서에 나열된 이름과 일치하도록 보장합니다.
출처: 문서
본문
시작하기 전에
- HA Vault Cluster with Integrated Storage 예시의 단계에 따라 클러스터를 구축합니다.
- Standalone Server with TLS의 예시와 지침을 따라 TLS 인증서를 만듭니다.
해결책 1: Raft 구성에서 auto-join을 사용하고 TLS 서버 설정
조인 경고는 auto-join을 사용하고 Vault 구성의 Raft 스탠자에 예상 TLS 서버 이름(${CN})을 leader_tls_servername으로 설정하면 사라집니다.
예를 들어:
storage "raft" {
path = "/vault/data"
retry_join {
leader_api_addr = "https://vault-0.${SERVICE}:8200"
leader_tls_servername = "${CN}"
leader_client_cert_file = "/vault/tls/vault.crt"
leader_client_key_file = "/vault/tls/vault.key"
leader_ca_cert_file = "/vault/tls/vault.ca"
}
retry_join {
leader_api_addr = "https://vault-1.${SERVICE}:8200"
leader_tls_servername = "${CN}"
leader_client_cert_file = "/vault/tls/vault.crt"
leader_client_key_file = "/vault/tls/vault.key"
leader_ca_cert_file = "/vault/tls/vault.ca"
}
retry_join {
leader_api_addr = "https://vault-2.${SERVICE}:8200"
leader_tls_servername = "${CN}"
leader_client_cert_file = "/vault/tls/vault.crt"
leader_client_key_file = "/vault/tls/vault.key"
leader_ca_cert_file = "/vault/tls/vault.ca"
}
}
해결책 2: Raft 구성에 로드 밸런서 추가
Vault 클러스터용 로드 밸런서가 있다면 Raft 구성에 단일 retry_join 스탠자를 추가하고 leader_api_addr로 로드 밸런서 주소를 사용할 수 있습니다.
예를 들어:
storage "raft" {
path = "/vault/data"
retry_join {
leader_api_addr = "https://vault-active:8200"
leader_client_cert_file = "/vault/tls/vault.crt"
leader_client_key_file = "/vault/tls/vault.key"
leader_ca_cert_file = "/vault/tls/vault.ca"
}
}