Sameness Group 생성

Sameness Group 생성 (K8s)

이 페이지는 Kubernetes에서 실행되는 Consul 배포에서 여러 관리 파티션을 기능적으로 동일하게 지정하는 sameness group을 만드는 방법을 설명해요. sameness group에 관리 파티션을 추가하면 클러스터 피어링 연결을 가진 원격 파티션에 등록된 서비스가 같은 이름과 Consul 네임스페이스를 공유할 때 같은 서비스의 인스턴스로 인식되어요.

출처: 문서

본문

이 페이지는 Kubernetes에서 실행되는 Consul 배포에서 여러 관리 파티션을 기능적으로 동일하게 지정하는 sameness group을 만드는 방법을 설명합니다. sameness group에 관리 파티션을 추가하면 클러스터 피어링 연결로 원격 파티션에 등록된 서비스가 이름과 Consul 네임스페이스를 공유할 때 같은 서비스의 인스턴스로 인식할 수 있게 Consul이 구성됩니다.

sameness group을 사용한 장애 조치 전략 구성에 대한 정보는 Failover with sameness groups을 참조하세요.

워크플로우 (Workflow)

Sameness group은 서비스 및 프록시 기본값에 대한 CRD(custom resource definition)를 포함해 동일한 구성을 가진 사용자 정의 파티션 집합입니다. 별도 클러스터의 파티션은 서로를 인식하려면 설정된 클러스터 피어링 연결이 있어야 합니다.

네트워크에서 sameness group을 만들고 사용하려면 다음 단계를 완료하세요.

  • 그룹의 각 멤버에 대한 sameness group CRD를 만듭니다. sameness group에 포함할 각 파티션에 대해 해당 파티션의 관점에서 그룹의 멤버를 정의하는 sameness group CRD를 작성하고 적용해야 합니다. 구성 계층, 기본값, 사양에 대한 자세한 내용은 sameness group configuration entry reference를 참조하세요.
  • sameness group 멤버에게 서비스를 내보냅니다. 파티션의 서비스를 그룹의 다른 멤버가 사용할 수 있게 하는 exported services CRD를 작성하고 적용해야 합니다. 추가 사양 정보는 exported services configuration entry reference를 참조하세요.
  • sameness group의 각 멤버에 대한 서비스 의도를 만듭니다. sameness group에 포함할 각 파티션에 대해 그룹의 모든 멤버가 서비스에 트래픽을 보내도록 승인하는 service intentions CRD를 작성하고 적용해야 합니다. 추가 사양 정보는 service intentions configuration entry reference를 참조하세요.

요구 사항 (Requirements)

  • sameness group을 만들려는 모든 데이터센터는 Consul v1.16 이상을 실행해야 합니다. 배포 업그레이드 방법에 대한 자세한 내용은 upgrade instructions을 참조하세요.
  • Consul Enterprise 라이선스가 필요합니다.

시작하기 전에 (Before you begin)

sameness group을 만들기 전에 다음 작업을 수행하여 네트워크를 준비하세요.

Consul 네임스페이스와 서비스 명명 규칙 확인

Sameness group은 파티션 수준에서 정의됩니다. Consul은 그룹의 모든 파티션이 동일한 서비스 이름과 동일한 Consul 네임스페이스를 포함해 동일한 구성을 가진다고 가정합니다. 이 동작은 그룹의 두 파티션에 공통 이름과 네임스페이스를 공유하는 기능적으로 다른 서비스가 포함된 경우에도 발생합니다. 예를 들어 api라는 서로 다른 서비스가 sameness group의 서로 다른 멤버에 등록되면 요청이 잘못된 서비스로 전송될 수 있어 오류가 발생할 수 있습니다.

오류를 방지하려면 네트워크에 배포된 서비스의 이름과 배포된 네임스페이스를 확인하세요. 기본 네임스페이스에 특히 주의하여 서비스에 고유한 이름이 있는지 확인하세요. 서로 다른 서비스가 이름을 공유한다면 서비스 중 하나의 이름을 변경하거나 서비스 중 하나를 다른 네임스페이스에 배포해야 합니다.

각 파티션에 메시 게이트웨이 배포

메시 게이트웨이는 클러스터 피어링 연결에 필요하며 단일 데이터센터에서 교차 파티션 트래픽을 보호하는 데 권장됩니다. 따라서 각 데이터센터에 메시 게이트웨이를 배포하여 네트워크, 특히 프로덕션 환경을 보호하는 것이 좋습니다. 메시 게이트웨이 구성에 대한 자세한 내용은 mesh gateways specifications를 참조하세요.

원격 파티션 간 클러스터 피어링 관계 설정

sameness group에 피어를 포함하려면 먼저 클러스터 피어와 연결을 설정해야 합니다. 클러스터 피어링 연결은 다른 데이터센터의 두 관리 파티션 사이에 존재하며, 두 파티션 사이의 각 연결은 각 피어와 별도로 설정해야 합니다. 단계별 지침은 establish cluster peering connections을 참조하세요.

클러스터 피어링 연결을 설정하고 같은 워크플로우의 일부로 그룹을 정의하려면 Export services between clusters까지의 지침을 따르세요. 클러스터 피어링 연결을 설정하고 sameness group을 만드는 데 동일한 exported services와 service intention 구성 항목을 사용할 수 있습니다.

Sameness group 생성

sameness group을 만들려면 그룹의 멤버인 각 파티션에 대해 세 가지 CRD 집합을 작성하고 적용해야 합니다.

  • Sameness group CRD: 각 파티션의 관점에서 sameness group을 정의합니다.
  • Exported services CRD: 서비스를 그룹의 다른 파티션에서 사용할 수 있게 합니다.
  • Service intentions CRD: 파티션 간 서비스 간 트래픽을 승인합니다.

각 파티션의 관점에서 sameness group 정의

파티션에 대한 sameness group을 정의하려면 그룹의 일부인 파티션과 클러스터 피어를 설명하는 sameness group CRD를 만듭니다. 일반적으로 이 순서는 다음 패턴을 따릅니다.

  1. 로컬 파티션
  2. 같은 데이터센터의 다른 파티션
  3. 설정된 클러스터 피어링 관계가 있는 파티션

모든 서비스가 기본적으로 sameness group의 다른 인스턴스로 장애 조치되기를 원하면 spec.defaultForFailover=true를 설정하고 장애 조치 시나리오에서 사용하려는 순서로 그룹 멤버를 나열하세요. 자세한 내용은 failover with sameness groups을 참조하세요.

sameness group CRD는 각 파티션마다 다릅니다. 다음 예시는 Partition 1과 Partition 2가 DC1에 있고 세 번째 파티션이 DC2의 Partition 1일 때 sameness group product-group의 일부인 세 파티션에 대해 세 가지 다른 CRD를 형식화하는 방법을 보여줍니다.

product-group.yaml

apiVersion: consul.hashicorp.com/v1alpha1
kind: SamenessGroup
metadata:
  name: product-group
spec:
  defaultForFailover: true
  members:
    - partition: partition-1
    - partition: partition-2
    - peer: dc2-partition-1

CRD를 만든 후 kubectl apply 명령으로 Consul 서버에 적용하세요.

$ kubectl apply -f product-group.yaml

그런 다음 sameness group의 멤버인 모든 파티션에 대해 CRD를 만들고 적용하는 과정을 반복하세요.

sameness group의 다른 파티션으로 서비스 내보내기

서비스를 sameness group의 다른 멤버가 사용할 수 있게 하려면 그룹의 각 파티션에 대해 exported services CRD를 작성하고 적용해야 합니다. 이 CRD는 로컬 파티션의 서비스를 나머지 그룹 멤버에게 내보냅니다. 각 CRD에서 내보낸 서비스의 consumer로 sameness group을 설정하세요. 단일 exported services 구성 항목에서 여러 서비스를 내보낼 수 있습니다.

각 파티션과 클러스터 피어를 나열하는 대신 consumer가 sameness group을 참조하도록 구성하고 있으므로, 그룹에 파티션 또는 피어를 추가할 때 이 구성을 다시 편집할 필요가 없습니다.

다음 예시는 각 파티션의 store 네임스페이스에 배포된 api라는 서비스를 모든 다른 그룹 멤버가 사용할 수 있게 하는 세 가지 다른 ExportedServices CRD를 형식화하는 방법을 보여줍니다.

apiVersion: consul.hashicorp.com/v1alpha1
Kind: ExportedServices
metadata:
  name: partition-1
spec:
  services:
    - name: api
      namespace: store
      consumers:
        - samenessGroup: product-group

동시에 여러 서비스를 내보내는 CRD 예시를 포함한 서비스 내보내기에 대한 자세한 내용은 exported services configuration entry reference를 참조하세요.

CRD를 만든 후 kubectl apply 명령으로 Consul 서버에 적용하세요.

$ kubectl apply -f product-group-export.yaml

같은 워크플로우의 일부로 클러스터 피어와 sameness group에 서비스 내보내기

두 파티션 사이에 클러스터 피어링 연결을 만든 다음 파티션을 sameness group에 추가하려면 두 개의 별도 exported services CRD를 작성하고 적용해야 합니다. 하나의 CRD는 피어에게 서비스를 내보내고, 두 번째 CRD는 그룹의 다른 멤버에게 서비스를 내보냅니다.

클러스터 피어링의 목적이 sameness group을 만드는 것이라면, peer 필드 대신 services[].consumers 블록을 samenessGroup 필드로 구성하여 단일 exported services 구성 항목을 작성하고 적용할 수 있습니다. 이 시나리오에서는 sameness group을 참조하는 ExportedServices CRD를 적용하기 전에 SamenessGroup CRD를 Kubernetes에 작성해야 한다는 점에 유의하세요.

그룹 멤버 간 트래픽 승인을 위한 서비스 의도 만들기

서비스를 sameness group의 다른 멤버에게 내보내면 원격 파티션에 서비스가 표시되지만, 로컬 서비스가 sameness group의 멤버와 트래픽을 주고받을 수 있도록 승인하는 서비스 의도도 만들어야 합니다.

그룹의 멤버인 각 파티션에 대해 그룹의 일부인 서비스에 대한 의도를 정의하는 service intentions CRD를 작성하고 적용하세요. 구성 항목의 sources 블록에서 서비스 이름, 네임스페이스, sameness group을 포함하고 allow 권한을 부여하세요.

각 파티션과 클러스터 피어를 나열하는 대신 sources 블록에서 sameness group을 사용하고 있으므로, 멤버가 그룹에 추가되거나 제거될 때 service intentions 구성 항목을 더 편집할 필요가 없습니다.

다음 예시는 로컬 파티션을 포함한 sameness group의 모든 멤버에 배포된 payments의 모든 인스턴스에 api라는 서비스를 사용할 수 있게 하는 세 가지 다른 ServiceIntentions CRD를 형식화하는 방법을 보여줍니다. 이 예시에서 api는 세 파티션 모두의 store 네임스페이스에 배포됩니다.

apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceIntentions
metadata:
  name: api-intentions
spec:
  sources:
  - name: api
    action: allow
    namespace: store
    samenessGroup: product-group

Consul에서 서비스 의도를 만들고 적용하는 방법에 대한 자세한 내용은 create and manage intentions를 참조하세요.

CRD를 만든 후 kubectl apply 명령으로 Consul 서버에 적용하세요.

$ kubectl apply -f api-intentions.yaml

같은 워크플로우의 일부로 클러스터 피어와 sameness group에 대한 서비스 의도 만들기

두 파티션 사이에 클러스터 피어링 연결을 만든 다음 파티션을 sameness group에 추가하려면 두 개의 별도 service intentions CRD를 작성하고 적용해야 합니다. 하나의 CRD는 피어에 대한 서비스를 승인하고, 두 번째 CRD는 그룹의 다른 멤버에 대한 서비스를 승인합니다.

클러스터 피어링의 목적이 sameness group을 만드는 것이라면, peer 필드 대신 sources 블록을 samenessGroup 필드로 구성하여 단일 service intentions CRD를 작성하고 적용할 수 있습니다. 이 시나리오에서는 sameness group을 참조하는 ServiceIntentions CRD를 적용하기 전에 SamenessGroup CRD를 Kubernetes에 작성해야 한다는 점에 유의하세요.

다음 단계 (Next steps)

sameness group CRD에서 defaultForFailover=true이면 추가 업스트림 구성이 필요하지 않습니다.

sameness group을 만든 후에는 sameness group의 서비스 간 장애 조치를 설정할 수도 있습니다. 자세한 내용은 Failover with sameness groups을 참조하세요.

더 알아보기 (Learn more)