커스텀 도메인 설정

클러스터 외부에서 사용자 또는 애플리케이션에 HTTP 트래픽을 제공하는 모든 Kf 앱은 도메인 이름과 연결되어야 합니다.

Kf에는 도메인을 구성할 수 있는 세 가지 위치가 있습니다. 우선 순위는 아래와 같습니다.

  1. Spaces
  2. kf 네임스페이스의 config-defaults ConfigMap

config-defaults ConfigMap

config-defaults ConfigMap은 Kf의 클러스터 전체 설정을 포함하며 클러스터 관리자가 수정할 수 있습니다. ConfigMap의 값은 공간 컨트롤러가 읽을 수 있고 이 값은 구성을 수정합니다. 도메인 값은 공간의 status.networkConfig.domains 필드에 반영됩니다.

Kf 클러스터의 도메인을 수정하려면 kf 네임스페이스에서 config-defaults ConfigMap을 수정합니다.

kubectl edit configmap config-defaults -n kf

다음과 같이 spaceClusterDomain 키에 대해 항목을 추가하거나 업데이트합니다.

spaceClusterDomain: my-domain.com

구성이 올바르게 업데이트되었는지 확인하려면 공간에서 도메인 값을 확인합니다.

kf space SPACE_NAME -o "jsonpath={.status.networkConfig.domains[]['domain']}"

출력은 다음과 유사하게 표시됩니다.

Getting Space some-space
some-space.my-domain.com

각 공간에는 클러스터 도메인에 자체 이름이 프리픽스로 사용됩니다. 이렇게 하면 앱 간 충돌을 방지할 수 있습니다.

공간 도메인

공간은 도메인 구성을 위한 권한 위치입니다. 개발자가 사용할 각 공간에 도메인 및 하위 도메인을 할당할 수 있습니다. 도메인 구성 필드는 spec.networkConfig.domains입니다.

kf space를 사용하여 공간에 할당된 도메인을 확인합니다.

kf space SPACE_NAME

출력에서 Spec 필드는 공간의 특정 구성을 포함하고 Status 필드는 끝에 추가된 클러스터 전체 기본값으로 공간의 구성을 반영합니다.

...
Spec:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
...
Status:
  Network Config:
    Domains:
      Domain: my-space.mycompany.com
      Domain: my-space.prod.us-east1.kf.mycompany.com

CLI를 사용한 구성

kf CLI는 공간 도메인의 변형을 지원합니다. 각 명령어는 이전 구성과 새 구성 간의 차이점을 출력합니다.

kf configure-space append-domain로 새 도메인 추가:

kf configure-space append-domain SPACE_NAME myspace.mycompany.com

kf configure-space set-default-domain을 사용하여 기존 도메인을 추가하거나 기본값으로 설정합니다.

kf configure-space set-default-domain SPACE_NAME myspace.mycompany.com

마지막으로 도메인을 삭제합니다.

kf configure-space remove-domain SPACE_NAME myspace.mycompany.com

앱은 해당 구성의 일부로 도메인을 지정할 수 있습니다. 경로는 다음 논리를 사용하는 kf push 도중에 앱에 매핑됩니다.

let current_routes  = The set of routes already on the app
let manifest_routes = The set of routes defined by the manifest
let flag_routes     = The set of routes supplied by the --route flag(s)
let no_route        = Whether the manifest has no-route:true or --no-route is set
let random_route    = Whether the manifest has random-route:true or --random-route is set

let new_routes = Union(current_routes, manifest_routes, flag_routes)

if new_routes.IsEmpty() then
  if random_route then
    new_routes.Add(CreateRandomRoute())
  else
    new_routes.Add(CreateDefaultRoute())
  end
end

if no_route then
  new_routes.RemoveAll()
end

return new_routes

앱에서 경로를 지정하지 않거나 임의 경로를 요청하면 공간의 첫 번째 도메인이 사용됩니다. 공간의 첫 번째 도메인이 변경되면 기본 도메인을 사용하는 공간의 모든 앱이 이를 반영하기 위해 업데이트됩니다.

도메인 템플릿

Kf는 도메인에서 변수 대체를 지원합니다. 대체를 사용하면 단일 클러스터 전체 도메인을 공간별로 맞춤설정하고 인그레스 IP 변경사항에 대응할 수 있습니다. 대체는 도메인에서 수행되는 $(VARIABLE_NAME) 구문의 변수로 수행됩니다.

변수 설명
CLUSTER_INGRESS_IP 클러스터 인그레스의 IPV4 주소입니다.
SPACE_NAME 공간의 이름입니다.

다음 예시에서는 도메인 변수를 사용하여 여러 다른 조직 구조 및 클러스터 패턴을 지원하는 방법을 보여줍니다.

  • nip.io와 같은 와일드 카드 DNS 서비스를 사용합니다.

    $(SPACE_NAME).$(CLUSTER_INGRESS_IP).nip.io
    
  • 중앙에서 관리되는 DNS가 있는 조직의 도메인입니다.

    $(SPACE_NAME).cluster-name.example.com
    
  • 자체 DNS를 관리하는 팀의 도메인입니다.

    cluster-name.$(SPACE_NAME).example.com
    
  • 웜 장애 조치 및 외부 회로 차단기가 있는 클러스터의 도메인입니다.

    $(SPACE_NAME)-failover.cluster-name.example.com
    

Kf와 CF의 차이점

  • Kf 공간은 클러스터 전체 도메인에 공백 이름을 프리픽스로 붙입니다.
  • Kf는 사용자가 지정한 경로에서 도메인 충돌을 확인하지 않습니다.