sameness 그룹 생성
sameness 그룹 생성 (Create Sameness Groups)
이 문서는 네트워크에서 기능적으로 동일한 어드민 파티션 집합을 지정하는 sameness 그룹을 만드는 방법을 설명해요. 어드민 파티션을 sameness 그룹에 추가하면, 클러스터 피어링 연결이 있는 원격 파티션에 등록된 서비스가 이름과 네임스페이스를 공유할 때 같은 서비스의 인스턴스로 Consul이 인식하게 됩니다.
출처: 문서
본문
이 페이지는 네트워크에서 기능적으로 동일한 어드민 파티션 집합을 지정하는 sameness 그룹을 만드는 방법을 설명합니다. 어드민 파티션을 sameness 그룹에 추가하면 클러스터 피어링 연결이 있는 원격 파티션에 등록된 서비스가 이름과 네임스페이스를 공유할 때 같은 서비스의 인스턴스로 Consul이 인식하게 됩니다.
sameness 그룹을 사용한 장애 조치 전략 구성에 대한 정보는 sameness 그룹으로 장애 조치를 참조하세요.
워크플로 (Workflow)
sameness 그룹은 서비스·프록시 기본값에 대한 구성 항목을 포함해 동일한 구성을 가진 사용자 정의 파티션 집합입니다. 별도 클러스터의 파티션은 서로를 인식하려면 클러스터 피어링 연결이 설정되어 있어야 합니다.
네트워크에서 sameness 그룹을 만들고 사용하려면 다음 단계를 완료합니다:
- 그룹의 각 멤버에 대한 sameness group 구성 항목을 생성합니다. sameness 그룹에 포함하려는 각 파티션에 대해 해당 파티션의 관점에서 그룹 멤버를 정의하는 sameness group 구성 항목을 작성·적용해야 합니다. 구성 계층, 기본값, 사양에 대한 자세한 내용은 sameness group 구성 항목 참조를 참조하세요.
- sameness 그룹 멤버에 서비스를 내보냅니다. 파티션의 서비스를 그룹의 다른 멤버에 제공하도록 하는 exported services 구성 항목을 작성·적용해야 합니다. 추가 사양은 exported services 구성 항목 참조를 참조하세요.
- sameness 그룹의 다른 멤버를 승인하는 서비스 의도를 생성합니다. sameness 그룹에 포함하려는 각 파티션에 대해 그룹의 모든 멤버에서 여러분의 서비스로의 트래픽을 승인하는 service intentions 구성 항목을 작성·적용해야 합니다. 추가 사양은 service intentions 구성 항목 참조를 참조하세요.
요구 사항 (Requirements)
- sameness 그룹을 만들 모든 데이터센터는 Consul v1.16 이상을 실행해야 합니다. 배포를 업그레이드하는 방법에 대한 자세한 내용은 업그레이드 지침을 참조하세요.
- Consul Enterprise 라이선스가 필요합니다.
시작 전에 (Before you begin)
sameness 그룹을 만들기 전에 다음 작업을 수행해 네트워크를 준비합니다.
네임스페이스와 서비스 이름 규칙 확인 (Check namespace and service naming conventions)
sameness 그룹은 파티션 수준에서 정의됩니다. Consul은 그룹의 모든 파티션이 동일한 구성(동일한 서비스 이름과 동일한 네임스페이스 포함)을 가진다고 가정합니다. 이 동작은 그룹 안의 파티션이 공통 이름과 네임스페이스를 공유하는 기능적으로 다른 서비스를 포함하더라도 발생합니다. 예를 들어 api라는 다른 서비스들이 sameness 그룹의 서로 다른 멤버에 등록되면 요청이 잘못된 서비스로 전송될 수 있으므로 오류가 발생할 수 있습니다.
오류를 방지하려면 네트워크에 배포된 서비스의 이름과 배포된 네임스페이스를 확인하세요. 기본 네임스페이스에 특히 주의해서 서비스에 고유한 이름이 있는지 확인하세요. 다른 서비스가 이름을 공유한다면 서비스 이름 중 하나를 변경하거나 서비스 중 하나를 다른 네임스페이스에 배포해야 합니다.
각 파티션에 메시 게이트웨이 배포 (Deploy mesh gateways for each partition)
메시 게이트웨이는 클러스터 피어링 연결에 필요하며 단일 데이터센터의 파티션 간 트래픽을 보호하는 데 권장됩니다. 따라서 각 데이터센터에 메시 게이트웨이를 배포해 네트워크, 특히 프로덕션 환경을 보호할 것을 권장합니다. 메시 게이트웨이 구성에 대한 자세한 내용은 메시 게이트웨이 사양을 참조하세요.
원격 파티션 간 클러스터 피어링 관계 설정 (Establish cluster peering relationships between remote partitions)
sameness 그룹에 포함하기 전에 클러스터 피어와 연결을 설정해야 합니다. 클러스터 피어링 연결은 서로 다른 데이터센터의 두 어드민 파티션 사이에 존재하며, 두 파티션 사이의 각 연결은 각 피어와 별도로 설정되어야 합니다. 단계별 지침은 클러스터 피어링 연결 설정을 참조하세요.
같은 워크플로의 일부로 클러스터 피어링 연결을 설정하고 그룹을 정의하려면 클러스터 간 서비스 내보내기까지의 지침을 따르세요. 클러스터 피어링 연결을 설정하고 sameness 그룹을 만드는 데 같은 exported services와 service intention 구성 항목을 사용할 수 있습니다.
sameness 그룹 생성 (Create a sameness group)
sameness 그룹을 만들려면 그룹의 멤버인 각 파티션에 대해 세 개의 구성 항목 집합을 작성·적용해야 합니다.
- sameness group 구성 항목: 각 파티션의 관점에서 sameness 그룹을 정의합니다.
- exported services 구성 항목: 서비스를 그룹의 다른 파티션에서 사용할 수 있게 합니다.
- service intentions 구성 항목: 파티션 간 서비스 트래픽을 승인합니다.
각 파티션의 관점에서 sameness 그룹 정의 (Define the sameness group from each partition's perspective)
파티션에 대한 sameness 그룹을 정의하려면 그룹의 일부인 파티션과 클러스터 피어를 설명하는 sameness group 구성 항목을 만듭니다. 일반적으로 순서는 다음 패턴을 따릅니다:
- 로컬 파티션
- 같은 데이터센터의 다른 파티션
- 클러스터 피어링 관계가 설정된 파티션
기본적으로 모든 서비스가 sameness 그룹의 다른 인스턴스로 장애 조치되도록 하려면 DefaultForFailover=true를 설정하고 장애 조치 시나리오에서 사용할 순서로 그룹 멤버를 나열합니다. 자세한 내용은 sameness 그룹으로 장애 조치를 참조하세요.
sameness group 구성 항목은 각 파티션마다 다릅니다. 다음 예제는 Partition 1과 Partition 2가 DC1에 있고 세 번째 파티션이 DC2의 Partition 1일 때, sameness 그룹 product-group의 일부인 세 개 파티션에 대한 세 개의 다른 구성 항목을 형식화하는 방법을 보여줍니다.
dc1-partition-1
dc1-partition-2
dc2-partition-1
product-group.hcl:
Kind = "sameness-group"
Name = "product-group"
Partition = "partition-1"
Members = [
{Partition = "partition-1"},
{Partition = "partition-2"},
{Peer = "dc2-partition-1"}
]
product-group.hcl:
Kind = "sameness-group"
Name = "product-group"
Partition = "partition-2"
Members = [
{Partition = "partition-2"},
{Partition = "partition-1"},
{Peer = "dc2-partition-1"}
]
product-group.hcl:
Kind = "sameness-group"
Name = "product-group"
Partition = "partition-1"
Members = [
{Partition = "partition-1"},
{Peer = "dc1-partition-1"},
{Peer = "dc1-partition-2"}
]
구성 항목을 만든 후 consul config write 명령으로 Consul 서버에 적용합니다.
$ consul config write product-group.hcl
그런 다음 sameness 그룹의 멤버인 모든 파티션에 대한 구성 항목을 만들고 적용하는 과정을 반복합니다.
sameness 그룹의 다른 파티션에 서비스 내보내기 (Export services to other partitions in the sameness group)
서비스를 sameness 그룹의 다른 멤버에서 사용할 수 있게 하려면 그룹의 각 파티션에 exported services 구성 항목을 작성·적용해야 합니다. 이 구성 항목은 로컬 파티션의 서비스를 그룹의 나머지 멤버에게 내보냅니다. 각 구성 항목에서 sameness 그룹을 내보내진 서비스의 Consumer로 설정합니다. 단일 exported services 구성 항목에서 여러 서비스를 내보낼 수 있습니다.
소비자를 각 파티션과 클러스터 피어를 나열하는 대신 sameness 그룹을 참조하도록 구성하기 때문에, 그룹에 파티션이나 피어를 추가할 때 이 구성을 다시 편집할 필요가 없습니다.
다음 예제는 각 파티션의 store 네임스페이스에 배포된 api라는 서비스를 다른 모든 그룹 멤버에서 사용할 수 있게 하는 세 개의 다른 exported-service 구성 항목을 형식화하는 방법을 보여줍니다:
dc1-partition-1
dc1-partition-2
dc2-partition-1
Kind = "exported-services"
Name = "product-sg-export"
Partition = "partition-1"
Services = [
{
Name = "api"
Namespace = "store"
Consumers = [
{SamenessGroup="product-group"}
]
}
]
Kind = "exported-services"
Name = "product-sg-export"
Partition = "partition-2"
Services = [
{
Name = "api"
Namespace = "store"
Consumers = [
{SamenessGroup="product-group"}
]
}
]
Kind = "exported-services"
Name = "product-sg-export"
Partition = "partition-1"
Services = [
{
Name = "api"
Namespace = "store"
Consumers = [
{SamenessGroup="product-group"}
]
}
]
동시에 여러 서비스를 내보내는 구성 항목 예제를 포함한 서비스 내보내기에 대한 자세한 내용은 exported services 구성 항목 참조를 참조하세요.
구성 항목을 만든 후 consul config write 명령으로 Consul 서버에 적용합니다.
$ consul config write product-sg-export.hcl
같은 워크플로의 일부로 클러스터 피어와 sameness 그룹에 서비스 내보내기 (Export services for cluster peers and sameness groups as part of the same workflow)
두 파티션 사이에 클러스터 피어링 연결을 만든 다음 파티션을 sameness 그룹에 추가하려면 두 개의 별도 exported services 구성 항목을 작성·적용해야 합니다. 한 구성 항목은 서비스를 피어에게 내보내고, 두 번째 항목은 서비스를 그룹의 다른 멤버에게 내보냅니다.
클러스터를 피어링하는 목적이 sameness 그룹을 만드는 것이라면 Services[].Consumers 블록을 Peer 필드 대신 SamenessGroup 필드로 구성해 단일 exported services 구성 항목을 작성·적용할 수 있습니다.
이 시나리오에서는 sameness 그룹을 참조하는 exported-services 구성 항목을 적용하기 전에 sameness-group 구성 항목을 Consul에 작성해야 한다는 점에 유의하세요.
그룹 멤버 간 트래픽을 승인하는 서비스 의도 생성 (Create service intentions to authorize traffic between group members)
서비스를 sameness 그룹의 다른 멤버에게 내보내면 서비스가 원격 파티션에 보이게 되지만, 로컬 서비스가 sameness 그룹의 멤버와 트래픽을 주고받도록 승인하려면 서비스 의도도 만들어야 합니다.
그룹의 멤버인 각 파티션에 대해 그룹의 일부인 서비스에 대한 의도를 정의하는 service intentions 구성 항목을 작성·적용합니다. 구성 항목의 Sources 블록에 서비스 이름, 네임스페이스, sameness 그룹을 포함하고 allow 권한을 부여합니다.
Sources 블록에서 각 파티션과 클러스터 피어를 나열하는 대신 sameness 그룹을 사용하기 때문에, 그룹에 멤버가 추가되거나 제거될 때 service intentions 구성 항목을 추가 편집할 필요가 없습니다.
다음 예제는 로컬 파티션을 포함한 sameness 그룹의 모든 멤버에 배포된 payments의 모든 인스턴스에서 api라는 서비스가 사용 가능하게 하는 세 개의 다른 service-intentions 구성 항목을 형식화하는 방법을 보여줍니다. 이 예제에서 api는 세 파티션 모두의 store 네임스페이스에 배포됩니다.
dc1-partition-1
dc1-partition-2
dc2-partition-1
Kind = "service-intentions"
Name = "api-intentions"
Namespace = "store"
Partition = "partition-1"
Sources = [
{
Name = "api"
Action = "allow"
Namespace = "store"
SamenessGroup = "product-group"
}
]
Kind = "service-intentions"
Name = "api-intentions"
Namespace = "store"
Partition = "partition-2"
Sources = [
{
Name = "api"
Action = "allow"
Namespace = "store"
SamenessGroup = "product-group"
}
]
Kind = "service-intentions"
Name = "api-intentions"
Namespace = "store"
Partition = "partition-1"
Sources = [
{
Name = "api"
Action = "allow"
Namespace = "store"
SamenessGroup = "product-group"
}
]
Consul에서 서비스 의도를 만들고 적용하는 방법에 대한 자세한 내용은 의도 생성·관리를 참조하세요.
구성 항목을 만든 후 consul config write 명령으로 Consul 서버에 적용합니다.
$ consul config write api-intentions.hcl
같은 워크플로의 일부로 클러스터 피어와 sameness 그룹에 대한 서비스 의도 생성 (Create service intentions for cluster peers and sameness groups as part of the same workflow)
두 원격 파티션 사이에 클러스터 피어링 연결을 만든 다음 파티션을 sameness 그룹에 추가하려면 두 개의 별도 service intention 구성 항목을 작성·적용해야 합니다. 한 구성 항목은 서비스를 피어에게 승인하고, 두 번째 항목은 서비스를 그룹의 다른 멤버에게 승인합니다.
sameness 그룹을 만드는 목적으로 클러스터를 피어링한다면 단일 service intentions 구성 항목을 사용해 이 워크플로를 결합할 수 있습니다.
Sources 블록을 Peer 필드 대신 SamenessGroup 필드로 구성하세요. 이 시나리오에서는 sameness 그룹을 참조하는 service-intentions 구성 항목을 적용하기 전에 sameness-group 구성 항목을 Consul에 작성해야 한다는 점에 유의하세요.
다음 단계 (Next steps)
sameness group 구성 항목에서 DefaultForFailover=true이면 추가 업스트림 구성이 필요하지 않습니다.
sameness 그룹을 만든 후에는 서비스 디스커버리 사용 사례를 위해 정적 Consul DNS 조회와 동적 DNS 조회(prepared queries)와 함께 사용할 수 있습니다. 또한 sameness 그룹의 서비스 간 장애 조치를 설정할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요: