2023. 3. 29. 23:08ㆍ코딩/잡 공부
etcd / consul - config 콘피그 서비스 비교 / 설명 / 분석 / 클러스터링 / TLS / ACL 설정 세팅
etcd
- etcd
- 간단한 HTTP/JSON API를 제공합니다.
- 구글의 Chubby 락 서비스에 영향을 받은 강력한 일관성 모델을 사용합니다.
- 고성능이며, 대규모 클러스터에서 잘 작동합니다.
- 주로 Kubernetes와 같은 컨테이너 오케스트레이션 시스템에서 활용됩니다.
- etcd의 보안 기능
- 클라이언트 인증을 위한 TLS/SSL 인증서 지원 (CA 인증서 기반)
- 서버 간 통신을 위한 TLS/SSL 암호화 지원
- RBAC(Role-Based Access Control)를 통한 사용자 및 역할 기반 권한 관리
- V3 API를 사용하여 인증 및 권한 제어 가능
- 실행
etcd --config-file etcd.yaml
- 클러스터링 구성
etcd --name node1 \
--initial-advertise-peer-urls http://node1.example.com:2380 \
--listen-peer-urls http://node1.example.com:2380 \
--listen-client-urls http://node1.example.com:2379 \
--advertise-client-urls http://node1.example.com:2379 \
--initial-cluster node1=http://node1.example.com:2380,node2=http://node2.example.com:2380,node3=http://node3.example.com:2380 \
--initial-cluster-state new \
--initial-cluster-token etcd-cluster
- TLS 설정
→ 클라이언트 (환경변수)
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=https://localhost:2379
export ETCDCTL_CACERT=/path/to/ca.crt
export ETCDCTL_CERT=/path/to/client.crt
export ETCDCTL_KEY=/path/to/client.key
name: 'node1'
data-dir: '/tmp/etcd-data'
listen-client-urls: 'https://localhost:2379'
advertise-client-urls: 'https://localhost:2379'
listen-peer-urls: 'https://localhost:2380'
initial-advertise-peer-urls: 'https://localhost:2380'
initial-cluster: 'node1=https://localhost:2380'
initial-cluster-state: 'new'
initial-cluster-token: 'etcd-cluster'
# TLS 설정
client-transport-security:
cert-file: '/path/to/server.crt'
key-file: '/path/to/server.key'
client-cert-auth: true
trusted-ca-file: '/path/to/ca.crt'
auto-tls: false
peer-transport-security:
cert-file: '/path/to/server.crt'
key-file: '/path/to/server.key'
client-cert-auth: true
trusted-ca-file: '/path/to/ca.crt'
auto-tls: false
Consul
- Consul
- DNS와 HTTP API를 통해 서비스 검색 기능을 제공합니다.
- 건강 검사 및 시스템 메타데이터를 저장하는 기능이 포함되어 있습니다.
- 여러 데이터 센터 간의 데이터 복제를 지원합니다.
- 키-값 저장소 외에도 서비스 메시 및 서비스 검색 기능을 제공합니다.
두 시스템 모두 안전한 방식으로 아이디와 패스워드를 저장할 수 있습니다. etcd의 경우 일관성에 중점을 두고 있으며, Kubernetes와 같은 시스템과의 통합이 필요한 경우 사용할 수 있는 좋은 선택입니다. 반면에 Consul은 서비스 검색, 건강 검사, 멀티 데이터 센터 지원과 같은 추가 기능을 제공하므로, 이러한 기능이 필요한 환경에서 더 적합할 수 있습니다.
- Consul의 보안 기능
- 클라이언트와 서버 간 통신을 위한 TLS/SSL 암호화 지원 (CA 인증서)
- 인증 토큰(Access Tokens)을 사용한 ACL(Access Control List) 기반 권한 관리
- 서비스 간 암호화된 통신을 위한 Consul Connect를 통한 mTLS(mutual TLS) 지원
- 인증서 자동 갱신 및 인증서 기반 인증 기능
etcd와 Consul 모두 강력한 인증 및 암호화 기능을 제공하므로 둘 중 어느 것을 사용하더라도 적절한 보안을 구현할 수 있습니다. 그러나 Consul은 추가로 인증 토큰을 지원하고, Consul Connect를 사용하여 서비스 간 암호화된 통신을 쉽게 구현할 수 있다는 이점이 있습니다.
- 실행
consul agent -config-file=./consul.hcl
- hcl 양식
datacenter = "dc1"
data_dir = "/tmp/consul"
log_level = "INFO"
server = true
bootstrap_expect = 1
- 사용
consul kv put key_name value
consul kv get key_name
consul kv put -http-addr 192.168.1.10:8500 -token <write_token> hi2 hi2
- ACL 활성화
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
}
consul acl bootstrap
consul acl policy create -name "global-management2" -rules key_prefix="" { policy = "write" } -token <BOOTSTRAP_TOKEN>
consul acl policy create -name "global-management13" -rules "{\"key_prefix\":{\"hi\":{\"policy\":\"write\"}}}" -token <BOOTSTRAP_TOKEN>
consul acl token create -description "Service read token" -policy-name "service-read" -token <BOOTSTRAP_TOKEN>
→ 클라이언트
datacenter = "dc1"
data_dir = "./c_data"
client_addr = "127.0.0.1"
bind_addr = "127.0.0.1"
retry_join = ["127.0.0.1:8307", "127.0.0.1:8604", "127.0.0.1:8603"]
node_name = "client-node-1"
# 서버 모드 비활성화
server = false
- datacenter: Consul 데이터 센터의 이름을 지정합니다.
- data_dir: Consul 데이터를 저장할 디렉토리를 지정합니다. Windows에서는 절대 경로를 사용하는 것이 좋습니다.
- client_addr 및 bind_addr: 클라이언트 및 바인딩 주소를 지정합니다. 여기서는 모든 IP 주소를 사용하도록 설정했습니다.
- retry_join: 클라이언트가 조인을 시도할 Consul 서버의 주소 목록을 지정합니다.
- node_name: 클라이언트 노드의 이름을 지정합니다. 각 노드에 고유한 이름을 사용해야 합니다.
- server: 서버 모드를 비활성화하고 클라이언트 모드로 실행하도록 지정합니다.
acl = {
tokens = {
agent = "<CLIENT_TOKEN>"
}
}
- 클러스터링 설정
server1.hcl
datacenter = "dc1"
data_dir = "./data2"
log_level = "INFO"
server = true
bootstrap_expect = 3
node_name = "server1"
bind_addr = "127.0.0.1"
advertise_addr = "127.0.0.1"
retry_join = ["127.0.0.1:8306", "127.0.0.1:8351"]
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
}
ports {
http = 8604
grpc = 8524
server = 8512
serf_wan = 8309
serf_lan = 8307
dns = 8602
grpc_tls = 8625
}
server2.hcl
datacenter = "dc1"
data_dir = "./data3"
log_level = "INFO"
server = true
bootstrap_expect = 3
node_name = "server2"
bind_addr = "127.0.0.1"
advertise_addr = "127.0.0.1"
retry_join = ["127.0.0.1:8307", "127.0.0.1:8351"]
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
}
ports {
http = 8603
grpc = 8523
server = 8511
serf_wan = 8305
serf_lan = 8306
dns = 8601
grpc_tls = 8621
}
server3.hcl
datacenter = "dc1"
data_dir = "./data4"
log_level = "INFO"
server = true
bootstrap_expect = 3
node_name = "server3"
bind_addr = "127.0.0.1"
advertise_addr = "127.0.0.1"
retry_join = ["127.0.0.1:8306", "127.0.0.1:8307"]
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
}
ports {
http = 8507
grpc = 8505
grpc_tls = 8622
serf_wan = 8350
serf_lan = 8351
dns = 8650
grpc_tls = 8651
}
consul agent -config-file server3.hcl
consul agent -config-file server1.hcl
consul agent -config-file server2.hcl
- client.hcl
datacenter = "dc1"
data_dir = "./c_data"
client_addr = "127.0.0.1"
bind_addr = "127.0.0.1"
retry_join = ["127.0.0.1:8307", "127.0.0.1:8604", "127.0.0.1:8603"]
node_name = "client-node-1"
# 서버 모드 비활성화
server = false
consul agent -config-file client.hcl
클라이언트는 8500으로 접근
부트 스트랩
consul acl bootstrap -http-addr=127.0.0.1:8507
테스트
토큰은 뭐 쓰고 버렸으니깐~ 안가려
etcd / consul - config 콘피그 서비스 비교 / 설명 / 분석 / 클러스터링 / TLS / ACL 설정 세팅
'코딩 > 잡 공부' 카테고리의 다른 글
Hyper V 가상 머신 우분투 리눅스 용량 확장 (0) | 2023.04.17 |
---|---|
consul 도커 클러스터링, ACL 정책, 권한 설정 (clustering consul in docker) (0) | 2023.04.03 |
구글 플레이 Developer API로 apk / aab 업로드 (0) | 2023.03.29 |
윈도우 디팬던시 트러블 슈팅 해결 툴 (Window dependency tool) (0) | 2023.03.29 |
FastAPI에 모델 (Model) 적용 (0) | 2023.03.29 |