인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Kubernetes 클러스터 등록
이 가이드는 보호하려는 Kubernetes 클러스터에 Teleport Kubernetes 서비스를 배포하여 Kubernetes 클러스터를 Teleport 리소스로 등록하는 방법을 보여줍니다.
이 시나리오에서 Teleport Kubernetes 서비스 포드는 Kubernetes에서 실행 중임을 감지하고 Kubernetes 클러스터를 자동으로 등록합니다. 다음 다이어그램은 Kubernetes 클러스터에서 실행 중인 Teleport Kubernetes 서비스의 배포 시나리오에 대한 간단한 개요를 제공합니다:
Kubernetes 클러스터를 등록하고 검색하는 다른 방법에 대한 정보는 Teleport로 Kubernetes 클러스터 등록하기를 참조하세요.
사전 요구 사항
-
실행 중인 Teleport 클러스터,
tctl
관리 도구 및tsh
클라이언트 도구에 대한 액세스, 버전 >= 17.0.0-dev.Teleport Enterprise 및 Teleport Enterprise Cloud의 경우
tctl
의 Enterprise 버전을 사용해야 합니다. 다음 명령을 실행하여 설치된 도구를 확인할 수 있습니다:tctl versionTeleport Enterprise v17.0.0-dev go1.22
tsh versionTeleport v17.0.0-dev go1.22
환경에 맞는 적절한 설치 지침을 따라 이러한 도구를 다운로드할 수 있습니다.
-
Kubernetes >= v1.17.0
-
Helm >= 3.4.2
Helm과 Kubernetes가 설치되어 있고 최신 상태인지 확인하십시오.
helm versionversion.BuildInfo{Version:"v3.4.2"}
kubectl versionClient Version: version.Info{Major:"1", Minor:"17+"}
Server Version: version.Info{Major:"1", Minor:"17+"}
- 연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결할 수 있고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1/3단계. RBAC 리소스 생성
Teleport를 사용하여 Kubernetes 클러스터에 인증하려면 상호 작용할 계획인 Kubernetes 클러스터에 대한 액세스를 부여하는 Teleport 역할이 있어야 합니다.
이 단계에서는 사용자가 viewers
그룹의 일원으로서 Teleport 보호 Kubernetes 클러스터에 요청을 보낼 수 있도록 하는 kube-access
라는 Teleport 역할을 만드는 방법을 보여줍니다. Teleport Kubernetes 서비스는 사용자의 요청을 프록시할 때 viewers
그룹으로 가장합니다.
-
kube-access.yaml
라는 파일을 만들고 다음 내용을 추가합니다:kind: role metadata: name: kube-access version: v7 spec: allow: kubernetes_labels: "*": "*" kubernetes_resources: - kind: "*" namespace: "*" name: "*" verbs: ["*"] kubernetes_groups: - viewers deny: {}
-
변경 사항을 적용합니다:
tctl create -f kube-access.yaml -
kube-access
역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
새로운 역할을 추가하기 위해 로컬 사용자를 수정합니다:
tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},kube-access" -
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
텍스트 편집기에서
github
인증 커넥터를 엽니다:tctl edit github/github -
github
커넥터를 수정하여teams_to_roles
섹션에kube-access
을 추가합니다.이 역할에 매핑해야 하는 팀은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 팀은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 팀이어야 합니다.
예시는 다음과 같습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - kube-access
-
파일을 편집하고 저장하여 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
saml
구성 리소스를 가져옵니다:tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을saml.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하므로, 리소스를 업데이트한 후 즉시saml.yaml
파일을 삭제해야 합니다. -
saml.yaml
을 수정하여attributes_to_roles
섹션에kube-access
을 추가합니다.이 역할에 매핑해야 하는 속성은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 그룹은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 그룹이어야 합니다.
예시는 다음과 같습니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - kube-access
-
변경 사항을 적용합니다:
tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
oidc
구성 리소스를 가져옵니다:tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을oidc.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하므로, 리소스를 업데이트한 후 즉시oidc.yaml
파일을 삭제해야 합니다. -
oidc.yaml
을 수정하여claims_to_roles
섹션에kube-access
을 추가합니다.이 역할에 매핑해야 하는 클레임은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 그룹은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 그룹이어야 합니다.
예시는 다음과 같습니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - kube-access
-
변경 사항을 적용합니다:
tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
kube-access
역할이 viewers
그룹의 일원으로 Kubernetes 클러스터에 액세스하도록 승인했지만, 이 그룹은 아직 해당 Kubernetes 클러스터 내에서 권한을 가지고 있지 않습니다. 이러한 권한을 할당하려면 viewers
그룹에 권한을 부여하는 Kubernetes RoleBinding
또는 ClusterRoleBindings
를 생성해야 합니다.
-
viewers-bind.yaml
라는 파일을 만들고 다음 내용을 추가합니다:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: viewers-crb subjects: - kind: Group # "kube-access" 역할에 할당된 kubernetes_groups로 "viewers" 그룹을 바인딩합니다 name: viewers apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole # "view"는 리소스에 대한 읽기 전용 액세스를 부여하는 기본 ClusterRole입니다 # 참조: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles name: view apiGroup: rbac.authorization.k8s.io
-
kubectl
을 사용하여ClusterRoleBinding
을 적용합니다:kubectl apply -f viewers-bind.yaml
이제 Teleport 사용자는 Kubernetes 클러스터에 액세스할 때 viewers
그룹에 가입할 수 있는 권한을 가지며, viewers
그룹은 클러스터 내의 리소스를 볼 수 있는 권한을 갖게 됩니다. 다음 단계는 사용자 요청을 프록시하기 위해 클러스터에 Teleport Kubernetes 서비스를 배포하는 것입니다.
2/3단계. 안내된 등록 지침 따르기
이 단계에서는 Teleport 웹 UI에서 스크립트를 복사하고 이를 터미널에서 실행하여 Kubernetes 클러스터에 Teleport Kubernetes 서비스를 배포합니다.
-
Teleport 웹 UI를 열고 관리 계정을 사용하여 로그인합니다.
-
새 리소스 등록을 클릭합니다.
-
검색 필드에 Kubernetes의 전체 또는 일부를 입력하여 표시된 리소스 유형을 필터링한 다음 Kubernetes를 클릭합니다.
-
teleport-agent
차트 리포지토리를 추가하는 명령을 복사하고 작업 공간의 터미널에 붙여넣습니다. -
Teleport Kubernetes 서비스를 배포할 네임스페이스로
teleport-agent
를 입력하고, 이 클러스터에 연결할 때 사용할 표시 이름을 입력한 다음 다음을 클릭합니다.다음을 클릭하면 Teleport는 Kubernetes 클러스터를 Teleport 클러스터의 리소스로 구성하고 등록하는 스크립트를 생성합니다.
-
Teleport 웹 UI에 표시된 명령을 복사하여 터미널에서 실행합니다.
Teleport 웹 UI에 "새로운 Kubernetes 클러스터를 성공적으로 감지했습니다"라는 메시지가 표시되면 클러스터가 등록되었음을 확인할 수 있습니다. 이 메시지를 확인한 후 다음을 클릭하여 진행합니다.
3/3 단계. Kubernetes 액세스 테스트
이제 Teleport Kubernetes 서비스를 Kubernetes 클러스터에 배포하고 클러스터를 Teleport 리소스로 등록했으므로, viewers
그룹의 구성원으로서 Kubernetes 클러스터에 액세스할 수 있는지 확인합니다.
이 가이드의 이전 단계들을 따르면 액세스 설정 보기에 Kubernetes 그룹 필드가 viewers
로 채워집니다.
액세스를 설정하고 테스트하려면:
-
다음을 클릭합니다.
-
teleport-agent
네임스페이스, 이전 단계의 Kubernetesviewers
그룹 및 Teleport 사용자 이름을 지정합니다. -
Kubernetes 클러스터와 상호 작용하고 Teleport를 통해 액세스를 확인하기 위해 Teleport 웹 UI에 표시된 명령을 복사하여 실행합니다. 또는 아래에 표시된 명령을 실행합니다:
Teleport 클러스터에 인증합니다:
tsh login --proxy=teleport.example.com:443 --auth=local --user=admin@example.com teleport.example.com액세스할 수 있는 Kubernetes 클러스터 목록을 나열합니다:
tsh kube lsKubernetes 클러스터에 액세스하기 위한 자격 증명을 검색합니다:
tsh kube login Kubernetes-cluster-nameTeleport Kubernetes 서비스는
kubectl
명령을 프록시합니다:kubectl get pods -n teleport-agent이전에 배포한 Teleport Kubernetes 서비스 포드를 볼 수 있어야 합니다:
NAME READY STATUS RESTARTS AGE teleport-agent-0 1/1 Running 0 8m6s
-
끝내기를 클릭합니다.
다음 단계
이 가이드는 Kubernetes 클러스터 내에서 Teleport Kubernetes 서비스를 실행하여 Kubernetes 클러스터를 등록하는 방법을 설명하였습니다.
- 클라우드 공급자에 호스팅된 Kubernetes 클러스터를 발견하는 방법에 대한 정보는 Kubernetes 클러스터 검색를 참조하십시오.
- Teleport로 Kubernetes 클러스터를 등록하는 다른 방법에 대해 알아보려면 Teleport로 Kubernetes 클러스터 등록하기를 참조하십시오.
teleport-kube-agent
helm 차트에서 구성할 수 있는 매개변수의 전체 목록은 차트 참조를 참조하십시오.