etcd / consul - config 콘피그 서비스 비교 / 설명 / 분석 / 클러스터링 / TLS / ACL 설정 세팅

2023. 3. 29. 23:08코딩/잡 공부

etcd / consul - config 콘피그 서비스 비교 / 설명 / 분석 / 클러스터링 / TLS / ACL 설정 세팅 

 

 

etcd

 
  • etcd
  1. 간단한 HTTP/JSON API를 제공합니다.
  2. 구글의 Chubby 락 서비스에 영향을 받은 강력한 일관성 모델을 사용합니다.
  3. 고성능이며, 대규모 클러스터에서 잘 작동합니다.
  4. 주로 Kubernetes와 같은 컨테이너 오케스트레이션 시스템에서 활용됩니다.

 

  • etcd의 보안 기능
  1. 클라이언트 인증을 위한 TLS/SSL 인증서 지원 (CA 인증서 기반)
  2. 서버 간 통신을 위한 TLS/SSL 암호화 지원
  3. RBAC(Role-Based Access Control)를 통한 사용자 및 역할 기반 권한 관리
  4. 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
  1. DNS와 HTTP API를 통해 서비스 검색 기능을 제공합니다.
  2. 건강 검사 및 시스템 메타데이터를 저장하는 기능이 포함되어 있습니다.
  3. 여러 데이터 센터 간의 데이터 복제를 지원합니다.
  4. 키-값 저장소 외에도 서비스 메시 및 서비스 검색 기능을 제공합니다.

두 시스템 모두 안전한 방식으로 아이디와 패스워드를 저장할 수 있습니다. etcd의 경우 일관성에 중점을 두고 있으며, Kubernetes와 같은 시스템과의 통합이 필요한 경우 사용할 수 있는 좋은 선택입니다. 반면에 Consul은 서비스 검색, 건강 검사, 멀티 데이터 센터 지원과 같은 추가 기능을 제공하므로, 이러한 기능이 필요한 환경에서 더 적합할 수 있습니다.

 

  • Consul의 보안 기능
  1. 클라이언트와 서버 간 통신을 위한 TLS/SSL 암호화 지원 (CA 인증서)
  2. 인증 토큰(Access Tokens)을 사용한 ACL(Access Control List) 기반 권한 관리
  3. 서비스 간 암호화된 통신을 위한 Consul Connect를 통한 mTLS(mutual TLS) 지원
  4. 인증서 자동 갱신 및 인증서 기반 인증 기능

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
  1. datacenter: Consul 데이터 센터의 이름을 지정합니다.
  2. data_dir: Consul 데이터를 저장할 디렉토리를 지정합니다. Windows에서는 절대 경로를 사용하는 것이 좋습니다.
  3. client_addr 및 bind_addr: 클라이언트 및 바인딩 주소를 지정합니다. 여기서는 모든 IP 주소를 사용하도록 설정했습니다.
  4. retry_join: 클라이언트가 조인을 시도할 Consul 서버의 주소 목록을 지정합니다.
  5. node_name: 클라이언트 노드의 이름을 지정합니다. 각 노드에 고유한 이름을 사용해야 합니다.
  6. 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 설정 세팅