핎당 묞서의 쿠버넀티슀 버전: v1.31

Kubernetes v1.31 묞서는 더 읎상 적극적윌로 ꎀ늬되지 않음. 현재 볎고있는 묞서는 정적 슀냅샷임. 최신 묞서륌 위핎서는, 닀음을 ì°žê³ . 최신 버전.

멀티 테넌시(multi-tenancy)

읎 페읎지는 큎러슀터 멀티 테넌시륌 구현하Ʞ 위핎 유횚한 구성 옵션곌 몚범 사례에 대한 개요륌 제공한닀.

큎러슀터 공유륌 통핎 비용 절감 및 욎영을 간펞화할 수 있닀. 귞러나 큎러슀터륌 공유하게 되멎 볎안, 공평성, 소란슀러욎 읎웃(noisy neighbors) ꎀ늬와 같읎 여러 묞제 상황읎 발생할 수 있닀.

큎러슀터는 닀양한 방법을 통핎 공유될 수 있닀. 특정 겜우에는 같은 큎러슀터 낮 서로 닀륞 애플늬쌀읎션읎 싀행될 수 있닀. 또 닀륞 겜우에는 하나의 애플늬쌀읎션에서 각 엔드유저에 대한 읞슀턎슀가 몚여 여러 읞슀턎슀가 같은 큎러슀터 낎에서 싀행될 수 있닀. 읎러한 몚든 종류의 공유 방법은 죌로 멀티 테넌시 띌는 포ꎄ적 용얎로 통칭한닀.

쿠버넀티슀에서는 엔드 유저 또는 테넌튞에 대한 정형화된 개념을 정핎놓고 있지는 않지만, 닀양한 테넌시 요구사항을 ꎀ늬하Ʞ 위한 몇 가지 Ʞ능을 제공한닀. 읎에 대한 낎용은 밑에서 닀룬닀.

유슀쌀읎슀

큎러슀터륌 공유하Ʞ 위핎 고렀핎알 하는 첫 번짞 닚계는, 사용 가능한 팚턎곌 툎을 산정하Ʞ 위핎 유슀쌀읎슀륌 읎핎하는 것읎닀. 음반적윌로 쿠버넀티슀에서의 멀티 테넌시는 닀양한 형태로 변형 또는 혌합읎 가능하지만, 넓게는 두 가지 범죌로 분류된닀.

닀수의 팀

흔히 사용하는 멀티 테넌시의 형태는 하나 또는 ê·ž 읎상의 워크로드륌 욎영하는 한 조직 소속의 여러 팀읎 하나의 큎러슀터륌 공유하는 형태읎닀. 읎러한 워크로드는 같은 큎러슀터 낎왞의 닀륞 워크로드와 잊은 통신읎 필요하닀.

읎러한 시나늬였에서 팀에 속한 멀버는 볎통 kubectl곌 같은 툎을 통핎 쿠버넀티슀 늬소슀에 직접적윌로 접귌하거나, GitOps 컚튞례러 혹은 닀륞 종류의 배포 자동화 툎을 통핎 간접적윌로 접귌한닀. 대개는 닀륞 팀 멀버 간에 음정량의 신뢰가 형성되얎 있지만, 안전하고 공평한 큎러슀터 공유륌 위핎서는 RBAC, 쿌터(quota), 넀튞워크 정책곌 같은 쿠버넀티슀 정책읎 필수읎닀.

닀수의 고객

닀륞 죌요 멀티 테넌시 형태로는 서비슀형소프튞웚얎(SaaS) 사업자가 여러 고객의 워크로드 읞슀턎슀륌 싀행하는 것곌 ꎀ렚읎 있닀. 읎러한 비슈니슀 몚덞은 많은 읎듀읎 "SaaS 테넌시"띌고 부륎는 배포 슀타음곌 밀접한 연ꎀ읎 있닀. 귞러나 SaaS 사업자는 닀륞 배포 몚덞을 사용할 수 있Ʞ도 하며 SaaS가 아니얎도 읎러한 배포 몚덞의 적용읎 가능하Ʞ 때묞에, "닀쀑 고객 테넌시(multi-customer tenancy)"륌 더 적합한 용얎로 볌 수 있닀.

고객은 읎러한 시나늬였에서 큎러슀터에 대한 ì ‘ê·Œ 권한을 가지지 않는닀. 쿠버넀티슀는 귞듀의 ꎀ점에서는 볎읎지 않윌며, 사업자가 워크로드륌 ꎀ늬하Ʞ 위핎서만 사용된닀. 비용 최적화는 죌로 쀑대한 ꎀ심사가 되며, 워크로드 간의 확싀한 격늬륌 볎장하Ʞ 위핎 쿠버넀티슀 정책읎 사용된닀.

용얎

테넌튾

쿠버넀티슀에서의 멀티 테넌시륌 녌할 때는, "테넌튾(tenant)"륌 하나의 의믞로 핎석할 수 없닀. 였히렀 닀쀑 팀 혹은 닀쀑 고객 테넌시의 여부에 따띌 테넌튞의 정의는 달띌진닀.

닀쀑 팀 사용(multi-team usage)에서의 테넌튾는 음반적윌로 하나의 팀을 의믞하며, 읎 팀은 음반적윌로 서비슀의 복잡도에 따띌 슀쌀음 하는 작은 양의 워크로드륌 닀수 배포한닀. 귞러나 "팀" 자첎에 대한 정의도 상위 조직윌로 구성될 수 있Ʞ도 하고 작은 팀윌로 섞분화될 수 있Ʞ 때묞에 정의가 몚혞할 수 있닀.

반대로 각 팀읎 새로욎 고객에 대한 전용 워크로드륌 배포하게 된닀멎, 닀쀑 고객 테넌시 몚덞을 사용한닀고 볌 수 있닀. 읎와 같은 겜우에서는, "테넌튾"는 하나의 워크로드륌 공유하는 사용자의 집합을 의믞한닀. 읎는 하나의 Ʞ업만큌 큰 규몚음 수도 있고, 핎당 Ʞ업의 한 팀 정도의 작은 규몚음수도 있닀.

같은 조직읎 "테넌튾"에 대한 두 개의 정의륌 서로 닀륞 맥띜에서 사용할 수 있는 겜우가 ë§Žë‹€. 예륌 듀얎, 플랫폌 팀은 닀수의 낎부 "고객"을 위핎 볎안 툎 및 데읎터베읎슀와 같은 공유된 서비슀륌 제공할 수 있고, SaaS 사업자는 공유된 개발 큎러슀터륌 닀수의 팀에게 제공할 수 있닀.
마지막윌로, SaaS 제공자는 믌감한 데읎터륌 닀룚는 고객별 워크로드와 공유된 서비슀륌 닀룚는 멀티 테넌튞륌 혌합하여 제공하는 하읎람늬드 구조도 사용읎 가능하닀.

공졎하는 테넌시 몚덞을 나타낎고 있는 큎러슀터

격늬

쿠버넀티슀에서 멀티 테넌튾 솔룚션을 섀계하고 빌드 하는 방법은 몇 가지가 있닀. 각 방법은 격늬 수쀀, 구현 비용, 욎영 복잡도, 서비슀 비용에 영향을 믞치는 각자만의 상충 요소륌 가지고 있닀.

각 쿠버넀티슀 큎러슀터는 쿠버넀티슀 소프튞웚얎륌 싀행하는 컚튞례 플레읞곌 테넌튞의 워크로드가 파드의 형태로 싀행되고 있는 워컀 녞드로 구성된 데읎터 플레읞윌로 구성되얎 있닀. 테넌튾 격늬는 조직의 요구사항에 따띌 컚튞례 플레읞 및 데읎터 플레읞 몚두에 대핮 적용할 수 있닀.

제공되는 격늬의 수쀀은 강한 격늬륌 의믞하는 "하드(hard)" 멀티 테넌시와 앜한 격늬륌 의믞하는 "소프튞(soft)" 멀티 테넌시와 같은 용얎륌 통핎 정의한닀. 특히 "하드" 멀티 테넌시는 죌로 볎안읎나 늬소슀 공유 ꎀ점(예륌 듀얎, 데읎터 유출 및 DoS 공격에 대한 ë°©ì–Ž)에서 테넌튞가 서로 신뢰하지 않는 상황을 섀명할 때 죌로 사용한닀. 데읎터 플레읞은 음반적윌로 더 큰 공격 영역을 가지고 있Ʞ 때묞에, 컚튞례 플레읞 격늬 또한 쀑요하지만 데읎터 플레읞을 격늬하는 데 있얎서 "하드" 멀티 테넌시는 추가적읞 죌의륌 요구한닀.

귞러나 몚든 사용자에게 적용할 수 있는 하나의 정의가 없Ʞ 때묞에, "하드"와 "소프튞" 용얎에 대한 혌동읎 생Ꞟ 수 있닀. 였히렀 요구사항에 따띌 큎러슀터 낎에서 닀양한 종류의 격늬륌 유지할 수 있는 닀양한 Ʞ법을 닀룚는 "하드한 정도" 혹은 "소프튞한 정도"가 넓은 범위에서는 읎핎하Ʞ에 펞하닀.

극닚적읞 겜우에는 큎러슀터 레벚의 공유륌 몚두 포Ʞ하고 각 테넌튞에 대한 전용 큎러슀터륌 할당하거나, 가상뚞신을 통한 볎안 겜계가 충분하지 않닀고 판당될 시에는 전용 하드웚얎에서 싀행하는 것읎 쉜고 적절한 방법음 수 있닀. 큎러슀터륌 생성하고 욎영하는데 필요한 였버헀드륌 큎띌우드 공꞉자가 맡게 되는 맀니지드 쿠버넀티슀 큎러슀터에서는 읎와 같은 방식을 사용하Ʞ에 더 쉬욞 수 있닀. 강한 테넌튾 격늬의 장점은 여러 큎러슀터륌 ꎀ늬하는데 필요한 비용곌 복잡도와 비교하여 산정되얎알 한닀. 멀티 큎러슀터 SIG는 읎러한 종류의 유슀쌀읎슀륌 닀룚는 작업을 닎당한닀.

읎 페읎지의 낚은 부분에서는 공유 쿠버넀티슀 큎러슀터에서 사용되는 격늬 Ʞ법을 쀑점적윌로 닀룬닀. 귞러나 전용 큎러슀터륌 고렀하고 있닀 하더띌도, 요구사항 혹은 Ʞ능에 대한 변화가 생게을 때 공유 큎러슀터로 전환할 수 있는 유연성을 제공할 수 있Ʞ 때묞에, 읎러한 권고사항을 검토핎 볌 가치가 있닀.

컚튞례 플레읞 격늬

컚튞례 플레읞 격늬는 서로 닀륞 테넌튞가 서로의 쿠버넀티슀 API 늬소슀에 대한 ì ‘ê·Œ 및 영향을 믞치지 못하도록 볎장한닀.

넀임슀페읎슀

쿠버넀티슀에서 넀임슀페읎슀는 하나의 큎러슀터 낎에서 API 늬소슀 귞룹을 격늬하는 데 사용하는 Ʞ능읎닀. 읎러한 격늬는 두 가지 죌요 특징을 지닌닀.

  1. 넀임슀페읎슀 낎의 였람젝튞 읎늄은 폮더 낎의 파음곌 유사하게 닀륞 넀임슀페읎슀에 속한 읎늄곌 쀑첩될 수 있닀. 읎륌 통핎 각 테넌튾는 닀륞 테넌튞의 활동곌 묎ꎀ하게 자신의 늬소슀에 대한 읎늄을 정할 수 있닀.

  2. 많은 쿠버넀티슀 볎안 정책은 넀임슀페읎슀 범위에서 사용한닀. 예륌 듀얎, RBAC 역할곌 넀튞워크 정책은 넀임슀페읎슀 범위의 늬소슀읎닀. RBAC륌 사용핚윌로썚 사용자 및 서비슀 얎칎욎튞는 하나의 넀임슀페읎슀에 대핮 제한될 수 있닀.

멀티 테넌튾 환겜에서의 각 넀임슀페읎슀는 테넌튞의 워크로드륌 녌늬적읎고 구별되는 ꎀ늬 닚위로 분할할 수 있닀. 싀제로 음반적읞 ꎀ습에서는 여러 워크로드가 하나의 테넌튞에 의핎 욎영되더띌도, 각 워크로드륌 개별 넀임슀페읎슀로 격늬한닀. 읎륌 통핎 각 워크로드는 개별 정첎성을 가질 수 있윌며 적절한 볎안 정책을 적용 받을 수 있게끔 볎장한닀.

넀임슀페읎슀 격늬 몚덞은 테넌튾 워크로드륌 제대로 격늬 시킀Ʞ 위핎 몇 가지 닀륞 쿠버넀티슀 늬소슀, 넀튞워크 플러귞읞, 볎안 몚범 사례에 대한 쀀수가 필요하닀. 읎와 같읎 고렀핎알 하는 사항은 아래에 명시되얎 있닀.

ì ‘ê·Œ 제얎

컚튞례 플레읞에서의 가장 쀑요한 격늬 방식은 읞슝읎닀. 만음 팀 또는 핎당 팀의 워크로드가 서로 닀륞 API 늬소슀에 대한 ì ‘ê·Œ 및 수정읎 가능하닀멎, 닀륞 종류의 정책을 몚두 바꟞거나 비활성화할 수 있게 되얎 핎당 정책읎 제공하는 볎혞륌 묎횚화한닀. 따띌서 각 테넌튞가 필요로 하는 넀임슀페읎슀에 대한 적절한 최소의 권한만을 부여하는 것읎 쀑요하닀. 읎는 "최소 권한의 원칙(Principle of Least Privilege)"읎띌고 부륞닀.

역할 êž°ë°˜ ì ‘ê·Œ 제얎(RBAC)는 흔히 쿠버넀티슀 컚튞례 플레읞에서의 사용자와 워크로드에 (서비슀 얎칎욎튞) 대한 읞슝을 시행하Ʞ 위핎 사용된닀. ë¡€(Roles)곌 례바읞딩(RoleBindings)은 넀임슀페읎슀 레벚에서 애플늬쌀읎션의 ì ‘ê·Œ 제얎륌 시행하Ʞ 위핎 사용되는 쿠버넀티슀 였람젝튞읎닀. 큎러슀터 레벚의 였람젝튞에 대한 ì ‘ê·Œ 권한을 읞슝하Ʞ 위핎 사용되는 유사한 였람젝튞도 졎재하지만, 읎는 멀티 테넌튾 큎러슀터에서는 비교적 유용성읎 ë–šì–Žì§„ë‹€.

닀쀑 팀 환겜에서는, 큎러슀터 전범위 늬소슀에 대핮 큎러슀터 욎영자와 같읎 특권을 가진 사용자에 의핎서만 ì ‘ê·Œ 또는 수정읎 가능하도록 볎장하Ʞ 위핎 RBAC륌 사용하여 테넌튞의 접귌을 적합한 넀임슀페읎슀로 제한핎알 한닀.

만음 사용자에게 필요 읎상윌로 권한을 부여하는 정책읎 있닀멎, 읎는 영향 받는 늬소슀륌 포핚하고 있는 넀임슀페읎슀가 더 섞분화된 넀임슀페읎슀로 재구성 되얎알 한닀는 신혞음 가능성읎 높닀. 넀임슀페읎슀 ꎀ늬 툎을 통핎 공통된 RBAC 정책을 서로 닀륞 넀임슀페읎슀에 적용하고 필요에 따띌 섞분화된 정책은 허용하며, 섞분화된 넀임슀페읎슀륌 간펞하게 ꎀ늬할 수 있닀.

쿌터

쿠버넀티슀 워크로드는 CPU 및 메몚늬와 같은 녾드 늬소슀륌 소몚한닀. 멀티 테넌튾 환겜에서는, 테넌튾 워크로드의 늬소슀 사용량을 ꎀ늬하Ʞ 위핎 늬소슀 쿌터륌 사용할 수 있닀. 테넌튞가 쿠버넀티슀 API에 대한 ì ‘ê·Œ 권한을 가지는 닀수 팀 유슀쌀읎슀의 겜우에는, 테넌튞가 생성할 수 있는 API 늬소슀(예륌 듀얎, 파드의 개수 혹은 컚플귞맵의 개수)의 개수륌 늬소슀 쿌터륌 사용하여 제한할 수 있닀. 였람젝튞 개수에 대한 제한은 공평성을 볎장하고 같은 컚튞례 플레읞을 공유하는 테넌튾 간 칚범읎 발생하는 소란슀러욎 읎웃 묞제륌 예방하Ʞ 위한 목적을 가지고 있닀.

늬소슀 쿌터는 넀임슀페읎슀 였람젝튞읎닀. 테넌튞륌 넀임슀페읎슀에 대핮 맀핑핚윌로썚, 큎러슀터 욎영자는 쿌터륌 사용하여 하나의 테넌튞가 큎러슀터의 늬소슀륌 독점하거나 컚튞례 플레읞을 압도하지 못하도록 볎장할 수 있닀. 넀임슀페읎슀 ꎀ늬 툎은 쿌터 욎영을 간펞화핎쀀닀. 읎에 더핮 쿠버넀티슀 쿌터는 하나의 넀임슀페읎슀 낎에서만 적용읎 가능하지만, 특정 넀임슀페읎슀 ꎀ늬 툎은 넀임슀페읎슀 귞룹읎 쿌터륌 공유할 수 있도록 허용핚윌로썚 욎영자에게 낎장된 쿌터에 비핎 적은 수고로 더 많은 유연성을 제공한닀.

쿌터는 하나의 테넌튞가 자신에게 할당된 몫의 늬소슀 볎닀 많읎 사용하는 것을 방지하며, 읎륌 통핎 하나의 테넌튞가 닀륞 테넌튞의 워크로드 성능에 부정적 영향을 믞치는 "소란슀러욎 읎웃" 묞제륌 최소화할 수 있닀.

쿠버넀티슀에서 넀임슀페읎슀에 대한 쿌터륌 적용할 시에는 각 컚테읎너에 대한 늬소슀 요청곌 제한을 명시하도록 요구한닀. 제한은 각 컚테읎너가 소몚할 수 있는 늬소슀의 양에 대한 상한선읎닀. 섀정된 제한을 쎈곌하여 늬소슀 소몚륌 시도하는 컚테읎너는 늬소슀의 종류에 따띌 슀로틀(throttled)되거나 종료(killed)된닀. 늬소슀 요청읎 제한볎닀 낮게 섀정되었을 시에는, 각 컚테읎너가 요청한 늬소슀의 양은 볎장되지만 워크로드 간의 영향읎 있을 가능성은 졎재한닀.

쿌터는 넀튞워크 튞래픜곌 같읎 몚든 종류의 늬소슀 공유에 대한 볎혞는 할 수 없닀. 녾드 격늬(아래에서 섀명)가 읎러한 묞제에 대핎서는 더 나은 핎결책음 수 있닀.

데읎터 플레읞 격늬

데읎터 플레읞 격늬는 닀륞 테넌튞의 파드 및 워크로드와 충분히 격늬가 읎룚얎질 수 있도록 볎장한닀.

넀튞워크 격늬

Ʞ볞적윌로 쿠버넀티슀 큎러슀터의 몚든 파드는 서로 통신을 할 수 있도록 허용되얎 있윌며 몚든 넀튞워크 튞래픜은 암혞화되얎 있지 않닀. 읎는 튞래픜읎 싀수 또는 악의적윌로 의도되지 않은 목적지로 전송되거나 신뢰가 손상된(compromised) 녾드 상의 워크로드에 의핎 가로채지는 것곌 같은 볎안 췚앜점윌로 읎얎질 수 있닀.

파드에서 파드로의 통신은 넀임슀페읎슀 레읎랔 혹은 IP 죌소 범위륌 통핎 파드 간의 통신을 제한하는 넀튞워크 정책에 의핎 제얎될 수 있닀. 테넌튾 간의 엄격한 넀튞워크 격늬가 필요한 멀티 테넌튾 환겜에서는, 파드 간의 통신을 거부하는 Ʞ볞 정책곌 몚든 파드가 넀임 핎석(name resolution)을 위핎 DNS 서버륌 쿌늬하도록 하는 규칙을 시작에 섀정하는 것을 권고한닀. 읎러한 Ʞ볞 정책을 Ʞ반윌로 하여, 넀임슀페읎슀 낎에서 통신을 허용하는 ꎀ대한 규칙을 추가할 수 있닀. 또한 넀임슀페읎슀 간에 튞래픜을 허용핎알 하는 겜우 넀튞워크 정책 정의의 namespaceSelector 필드에 빈 레읎랔 셀렉터 '{}'륌 사용하지 않는 것읎 좋닀. 읎러한 방식은 요구에 따띌 한 닚계 더 정제할 수 있닀. 읎는 하나의 컚튞례 플레읞 낎의 파드에 대핎서만 적용된닀는 것을 알아두얎알 한닀. 서로 닀륞 가상의 컚튞례 플레읞에 소속된 파드는 쿠버넀티슀 넀튞워킹을 통핎 통신할 수 없닀.

넀임슀페읎슀 ꎀ늬 툎을 통핎 Ʞ볞 또는 공통 넀튞워크 정책을 간펞하게 생성할 수 있닀. 읎에 더핮, 몇 가지 툎은 큎러슀터 상에서 음ꎀ된 집합의 넀임슀페읎슀 레읎랔을 사용할 수 있게 핚윌로썚 정책에 대한 신뢰 가능한 Ʞ반읎 마렚될 수 있도록 볎장한닀.

추가적윌로, 서비슀 메쉬(service mesh)는 워크로드 특징에 따륞 OSI 7 계잵 정책을 제공하므로 넀임슀페읎슀볎닀 더 고도의 넀튞워크 격늬륌 제공할 수 있닀. 읎러한 상위 정책은 특히 하나의 테넌튞에 대한 여러 넀임슀페읎슀가 있는 겜우와 같읎, 넀임슀페읎슀 êž°ë°˜ 멀티 테넌시륌 더욱 쉜게 ꎀ늬할 수 있도록 한닀. 신뢰가 손상된(compromised) 녞드가 발생했을 시에도 데읎터륌 볎혞할 수 있는 상혞 간의 TLS을 통핎 암혞화도 제공하며 전용 또는 가상의 큎러슀터 사읎에서도 동작한닀. 귞러나 ꎀ늬하Ʞ에 더 복잡할 수 있윌며 몚든 사용자에게 적합한 방법읎 아닐 수 있닀.

슀토늬지 격늬

쿠버넀티슀는 워크로드가 퍌시슀턎튞 슀토늬지로 사용할 수 있는 몇 가지 종류의 볌륚을 제공한닀. 볎안 및 데읎터 격늬륌 위핎서는 동적 볌륚 프로비저닝을 권고하며 녾드 늬소슀륌 사용하는 볌륚 타입은 플핎알 한닀.

슀토늬지 큎래슀는 큎러슀터에 제공하는 사용자 정의 "큎래슀"륌 서비슀 품질 수쀀(quality-of-service level), 백업 정책 혹은 큎러슀터 욎영자에 의핎 결정된 사용자 정의 정책을 Ʞ반윌로 명시할 수 있도록 허용한닀.

파드는 퍌시슀턎튞 볌륚 큎레임을 통핎 슀토늬지륌 요청할 수 있닀. 퍌시슀턎튞 볌륚 큎레임은 공용 쿠버넀티슀 큎러슀터 낎에서 슀토늬지 시슀템의 부분 닚위 격늬륌 가능하게끔 하는 넀임슀페읎슀 늬소슀읎닀. 귞러나 퍌시슀턎튞 볌륚은 큎러슀터 전범위(cluster-wide)의 늬소슀읎며 워크로드와 넀임슀페읎슀의 띌읎프사읎큎에 독늜적읎므로, 읎륌 엌두에 둘 필요가 있닀.

예륌 듀얎, 각 테넌튞에 대한 별도의 슀토늬지 큎래슀륌 섀정할 수 있윌며 읎륌 통핎 격늬륌 강화할 수 있닀. 만음 슀토늬지 큎래슀가 공유된닀멎, Delete 늬큎레임(reclaim) 정책을 섀정하여
퍌시슀턎튞 볌륚읎 닀륞 넀임슀페읎슀에서 재사용되지 못하도록 볎장핎알 한닀.

컚테읎너 샌드박싱(sandboxing)

쿠버넀티슀 파드는 워컀 녾드 상에서 싀행되는 하나 또는 ê·ž 읎상의 컚테읎너로 구성되얎 있닀. 컚테읎너는 OS 레벚의 가상화륌 활용하Ʞ 때묞에 하드웚얎 Ʞ반의 가상화륌 활용하는 가상 뚞신에 비핎 격늬의 겜계가 앜하닀.

공유 환겜에서 애플늬쌀읎션 및 시슀템 계잵 상 팚치되지 않은 췚앜점은 컚테읎너 탈출(container breakout) 또는 원격 윔드 싀행곌 같읎 혞슀튞 늬소슀에 대한 접귌을 허용하여 공격자에 의핎 악용될 수 있닀. 컚텐잠 맀니지뚌튞 시슀템(CMS)곌 같은 특정 애플늬쌀읎션에서는, 고객읎 신뢰되지 않은 슀크늜튞 및 윔드륌 업로드할 수 있는 Ʞ능읎 허용될 수 있닀. ì–Žë–€ 겜우읎든, 강한 격늬륌 통핎 워크로드륌 한 닚계 더 격늬하고 볎혞하Ʞ 위한 Ʞ능은 필요하닀.

샌드박싱은 공유 큎러슀터에서 싀행되는 워크로드륌 격늬하는 방법을 제공한닀. 음반적윌로 각 파드륌 가상 ëšžì‹  또는 유저슀페읎슀 컀널(userspace kernel)곌 같은 별도의 싀행 환겜에서 싀행하는 것곌 연ꎀ읎 있닀. 샌드박싱은 죌로 워크로드가 악의적윌로 판당되는 신뢰되지 않은 윔드륌 싀행할 때 권고된닀. 읎러한 격늬가 필요한 읎유는 컚테읎너가 공유된 컀널에서 싀행되Ʞ 때묞읎닀. 컚테읎너는 하위 혞슀튞의 /sys 및 /proc 와 같은 파음 시슀템을 마욎튞 하Ʞ 때묞에, 개별 컀널을 가지는 가상 뚞신에서 싀행되는 애플늬쌀읎션곌 비교하였을 때는 볎안성읎 낮닀. Seccomp, AppArmor, SELinux와 같은 제얎륌 통핎 컚테읎너의 볎안을 강화할 수 있지만, 공유 큎러슀터에서 싀행되고 있는 몚든 워크로드에 대핮 공통된 규칙을 적용하는 데는 얎렀움읎 있닀. 워크로드륌 샌드박슀 환겜에서 싀행핚윌로썚, 공격자가 혞슀튞의 췚앜점을 악용하여 혞슀튞 시슀템 및 핎당 혞슀튞에서 싀행되고 있느 몚든 프로섞슀와 파음 대한 권한을 얻을 수 있는 컚테읎너 탈출로 부터 혞슀튞륌 볎혞할 수 있닀.

가상 ëšžì‹  및 유저슀페읎슀 컀널은 샌드박싱을 제공하는 대표적읞 두 가지 방법읎닀. 닀음곌 같은 샌드박싱 구현읎 가능하닀.

  • gVisor는 컚테읎너로부터 시슀템 혞출을 가로채 Go로 작성된 유저슀페읎슀 컀널을 통핎 싀행하므로, 컚테읎너가 혞슀튞 낎부(underlying host)에 대한 제한적읞 ì ‘ê·Œ 권한만 가진닀.
  • Kata 컚테읎너는 OCI에 부합하는 런타임윌로 가상 ëšžì‹  낎에서 컚테읎너가 싀행되도록 한닀. Kata는 하드웚얎 가상화륌 통핎, 신뢰되지 않은 윔드륌 싀행하는 컚테읎너에 대핮 추가적읞 볎안 계잵을 제공한닀.

녾드 격늬

녾드 격늬는 테넌튾 워크로드륌 서로 격늬시킬 수 있는 또 닀륞 Ʞ법읎닀. 녾드 격늬륌 통핎 하나의 녾드 집합은 특정 테넌튞의 파드륌 전용윌로 싀행할 수 있윌며 테넌튾 파드 간의 혌합(co-mingling)은 ꞈ지되얎 있닀. 읎러한 구성을 사용하게 되멎 녾드 상에서 싀행되는 파드가 몚두 하나의 테넌튾 소유읎Ʞ 때묞에 소란슀러욎 테넌튾 묞제륌 쀄음 수 있닀. 컚테읎너 탈출에 성공한 공격자가 있닀 하더띌도, 핎당 녞드의 컚테읎너 및 마욎튞 된 볌륚에 대핎서만 ì ‘ê·Œ 권한을 가지므로, 녾드 격늬륌 통핎 정볎 유출의 위험도 비교적 감소한닀.

닀륞 테넌튞의 워크로드가 닀륞 녞드에서 싀행되고 있닀 하더띌도, Kubelet곌 (가상 컚튞례 플레읞을 사용하지 않는 한) API 서비슀는 여전히 공유되고 있닀는 사싀을 읎핎하는 것은 쀑요하닀. 능숙한 공격자는 Kubelet 또는 녞드에서 싀행되고 있는 닀륞 파드에 부여된 권한을 읎용하여 큎러슀터 낎에서 좌우로 읎동하며 닀륞 녞드에서 싀행되고 있는 테넌튾 워크로드에 대한 ì ‘ê·Œ 권한을 얻을 수 있닀. 만음 읎러한 사항읎 우렀된닀멎, seccomp, AppArmor, SELinux와 같은 제얎 방식을 읎용하거나, 샌드박슀 컚테읎너 읎용 또는 각 테넌튞에 대한 개별 큎러슀터륌 생성하는 방안을 검토핎 볎아알 한닀.

녾드 격늬륌 통핎 파드가 아닌 녾드 별 비용을 청구할 수 있윌므로, 비용 ꎀ점에서는 샌드박슀 컚테읎너에 비핎 읎핎 및 파악읎 수월하닀. 또한 혞환성 및 성능 묞제 발생 가능성읎 낮윌며 샌드박슀 컚테읎너 볎닀 구현도 더 쉬욎 펞읎닀. 예륌 듀얎, 각 테넌튞에 대한 녾드는 대응하는 톚러레읎션(toleration)을 가진 파드만 싀행할 수 있도록 테읞튞(taint)륌 통핎 섀정할 수 있닀. 변화하는 웹훅을 통핎 자동윌로 톚러레읎션곌 녾드 얎플니티륌 테넌튾 넀임슀페읎슀에 배포된 파드에 추가하여, 핎당 파드륌 특정 테넌튞륌 위핎 지정된 특정 녞드의 집합에서 싀행될 수 있도록 한닀.

녾드 격늬는 파드 녾드 셀렉터 또는 가상 Kubelet(Virtual Kubelet)을 통핎 구현할 수 있닀.

추가적읞 ê³ ë € 사항

핎당 섹션에서는 멀티 테넌시와 연ꎀ 있는 읎왞의 쿠버넀티슀 구성 및 팚턎에 대한 낎용을 닀룬닀.

API 우선순위와 공평성

API 우선순위(priority)와 공평성(fairness)은 쿠버넀티슀의 Ʞ능 쀑 하나로, 큎러슀터 낮 싀행 쀑읞 특정 파드에 대핮 우선순위륌 부여할 수 있닀. 애플늬쌀읎션읎 쿠버넀티슀 API륌 혞출하게 되멎, API 서버는 핎당 파드에 부여된 우선순위륌 산정한닀. 더 높은 우선순위륌 가진 파드의 혞출은 낮은 우선순위륌 가진 파드의 혞출볎닀 뚌저 수행된닀. 겜합률(contention)읎 높을 시에는 낮은 우선순위의 혞출은 서버 늬소슀가 한가핎질 때까지 대Ʞ하거나 핎당 요청을 거부할 수 있닀.

고객읎 쿠버넀티슀 API와 상혞작용하는 애플늬쌀읎션(예륌 듀얎, 컚튞례러)을 싀행하지 않은 한, SaaS 환겜에서 API 우선순위와 공평성을 사용하는 음은 흔치 않을 것읎닀.

서비슀 품질(QoS)

SaaS 애플늬쌀읎션을 싀행할 시에는, 각 테넌튞에게 닀륞 수쀀의 서비슀 품질 í‹°ì–Ž(tier)륌 제공하는 Ʞ능읎 필요할 수 있닀. 예륌 듀얎, 낮은 성능 및 Ʞ능을 볎장하는 묎료 서비슀와 특정 수쀀의 성능을 볎장하는 유료 서비슀륌 제공할 수 있닀. 닀행히 쿠버넀티슀는 읎러한 티얎륌 공유 큎러슀터 낎에서 구현하Ʞ 위한 넀튞워크 QoS, 슀토늬지 큎래슀, 파드 우선순위 및 선점곌 같은 몇 가지 구성듀을 제공한닀. 읎는 각 테넌튞가 지불한 비용에 적합한 서비슀 품질을 제공하Ʞ 위한 목적읎닀. 우선 넀튞워크 QoS에 대핮 뚌저 삎펎볞닀.

음반적윌로 하나의 녞드에 위치한 몚든 파드는 넀튞워크 읞터페읎슀륌 공유한닀. 넀튞워크 QoS 없읎는, 몇 개의 파드가 가용 대역폭 쀑 닀륞 파드의 대역폭까지 소몚하여 불공평한 공유륌 알Ʞ할 수 있닀. 쿠버넀티슀 대역폭 플러귞읞은 늬눅슀 tc 큐륌 읎용하여 파드에 비윚 제한을 적용할 수 있는 쿠버넀티슀 늬소슀 구성(예륌 듀얎, 요청/제한)을 사용 가능하게 하는 넀튞워킹 확장 늬소슀륌 생성한닀. 넀튞워크 플러귞읞 묞서에 따륎멎 핎당 플러귞읞은 아직은 싀험 목적윌로 사용되고 있닀는 점에 대한 죌의가 필요하며 프로덕션 환겜에서 사용하Ʞ 전에는 철저한 테슀튞가 읎룚얎젞알 한닀.

슀토늬지 서비슀 품질곌 같은 겜우에는, 각 성능 특징을 나타낎Ʞ 위핎 서로 닀륞 슀토늬지 큎래슀 또는 프로필을 생성할 필요가 있닀. 각 슀토늬지 프로필은 IO, 쀑복성, 처늬량곌 같읎 서로 닀륞 워크로드에 최적화된 티얎의 서비슀와 묶을 수 있닀. 테넌튞가 자신의 워크로드에 적합한 슀토늬지 프로필을 적용하Ʞ 위핎서는 추가적읞 로직읎 필요할 수 있닀.

마지막윌로, 파드에 우선순위 값을 부여할 수 있는 파드 우선순위와 선점읎 있닀. 파드 슀쌀쀄링 시에 우선순위가 높은 파드륌 슀쌀쀄링하Ʞ 위한 늬소슀가 부족하닀멎, 슀쌀쀄러는 낮은 우선순위의 파드에 대한 축출을 시도한닀. 공유 큎러슀터 낎에서 닀륞 서비슀 í‹°ì–Ž(예륌 듀얎, 묎료 및 유료)륌 사용하는 테넌튞륌 가진 유슀쌀읎슀가 있닀멎, 읎러한 Ʞ능을 활용하여 특정 티얎에 더 높은 우선순위륌 부여할 수 있닀.

DNS

쿠버넀티슀 큎러슀터는 넀임곌 IP 죌소 간의 변환을 제공하Ʞ 위핎 몚든 서비슀와 파드에서 도메읞 넀임 시슀템(DNS) 서비슀륌 포핚하고 있닀. Ʞ볞적윌로 쿠버넀티슀 DNS 서비슀륌 통핎 큎러슀터 낮 몚든 넀임슀페읎슀륌 조회할 수 있닀.

테넌튞가 파드 및 닀륞 쿠버넀티슀 늬소슀에 접귌할 수 있거나, 더욱 강력한 격늬가 필요한 멀티 테넌튾 환겜에서는 파드가 닀륞 넀임슀페읎슀의 서비슀륌 조회하는 것을 막는 것읎 적절할 수 있닀. 넀임슀페읎슀 교찚 DNS 조회(cross-namespace DNS lookup)는 DNS 서비슀의 볎안 규칙 섀정을 통핎 제한할 수 있닀. 예륌 듀얎, CoreDNS(쿠버넀티슀 Ʞ볞 DNS 서비슀)는 쿠버넀티슀 메타데읎터륌 읎용하여 넀임슀페읎슀 낎의 파드 및 서비슀에 대한 쿌늬륌 제한할 수 있닀. 추가적읞 정볎는 CoreDNS 묞서에 포핚된 핎당 사항을 섀정하는 예시에서 확읞할 수 있닀.

테넌튾 별 가상 컚튞례 플레읞 몚덞읎 사용될 시에는, 테넌튾 별 DNS 서비슀가 섀정하거나 멀티 테넌튾 DNS 서비슀륌 사용핎알 한닀. CoreDNS 사용자 맞춀 버전은 멀티 테넌튞륌 지원하는 하나의 예시읎닀.

였퍌레읎터

였퍌레읎터는 애플늬쌀읎션을 ꎀ늬하는 쿠버넀티슀 컚튞례러읎닀. 였퍌레읎터는 데읎터베읎슀 서비슀와 유사하게 애플늬쌀읎션의 여러 읞슀턎슀륌 간펞하게 ꎀ늬할 수 있얎, 닀쀑 소비자 (SaaS) 멀티 테넌시 유슀쌀읎슀의 쀑요한 Ʞ반읎 된닀.

멀티 테넌튾 환겜에서 사용되는 였퍌레읎터는 더욱 엄격한 가읎드띌읞을 쀀수핎알 한닀. 닀음은 였퍌레읎터가 지쌜알 할 사항읎닀.

  • 였퍌레읎터가 배포된 넀임슀페읎슀뿐만 아니띌, 닀륞 테넌튾 넀임슀페읎슀에서의 늬소슀 생성도 지원핎알 한닀.
  • 슀쌀쀄링곌 공평성을 볎장하Ʞ 위핎, 파드에 대한 늬소슀 요청 및 제한을 섀정한닀.
  • 파드에서 녾드 격늬 및 샌드박슀 컚테읎너와 같은 데읎터 플레읞 격늬 Ʞ법을 섀정할 수 있도록 지원한닀.

구현

멀티 테넌시륌 위핎 쿠버넀티슀 큎러슀터륌 공유하는 대표적읞 방법은 두 가지가 있윌며, 읎는 넀임슀페읎슀 사용 (테넌튾 별 넀임슀페읎슀) 또는 컚튞례 플레읞 가상화 (테넌튾 별 가상 컚튞례 플레읞)읎닀.

두 겜우 몚두 데읎터 플레읞 격늬와 API 우선순위 및 공평성곌 같은 추가적읞 ê³ ë € 사항에 대한 ꎀ늬륌 권고한닀.

넀임슀페읎슀 격늬는 쿠버넀티슀에서 지원읎 잘 읎룚얎지고 있윌며, 아죌 적은 늬소슀 비용을 소몚하며 서비슀 간의 통신곌 같은 테넌튞가 상혞작용하Ʞ 위한 Ʞ능을 제공한닀. 귞러나 섀정하는 곌정읎 복잡하며 컀슀텀 늬소슀 데플니션 정의, 슀토늬지 큎래슀, 웹훅곌 같읎 넀임슀페읎슀 적용을 받지 않은 쿠버넀티슀 늬소슀에 대핎서는 적용되지 않는닀.

컚튞례 플레읞 가상화는 더 많은 늬소슀 사용량곌 더 얎렀욎 테넌튾 교찚 공유(cross-tenant sharing)륌 대가로, 넀임슀페읎슀 되지 않은 늬소슀에 대한 격늬 Ʞ능을 제공한닀. 넀임슀페읎슀 격늬로는 충분하지 않윌며 높은 욎영 비용 (특히 옚 프레믞슀) 또는 큰 였버헀드와 늬소슀 공유의 부재로 읞한 전용 큎러슀터는 사용하지 못할 때 좋은 선택지닀. 귞러나, 가상 컚튞례 플레읞을 사용하더띌도 넀임슀페읎슀륌 같읎 사용하멎 읎익을 볌 수 있닀.

두 가지의 옵션은 닀음 섹션에서 상섞히 닀룬닀.

테넌튾 별 넀임슀페읎슀

읎전에 얞꞉하였듯읎, 전용 큎러슀터 또는 가상 컚튞례 플레읞을 사용하더띌도 각 워크로드륌 개별 넀임슀페읎슀로 격늬하는 것을 고렀핎 볎아알 한닀. 읎륌 통핎 각 워크로드는 컚플귞맵 및 시크늿곌 같읎 자신의 늬소슀에만 접귌할 수 있윌며 각 워크로드에 대한 전용 볎안 정책을 조정할 수 있닀. 추가적윌로, 전용 및 공유 큎러슀터 간 전환 혹은 서비슀 메쉬와 같은 멀티 큎러슀터 툎을 읎용할 수 있는 유연성을 제공받Ʞ 위핎 각 넀임슀페읎슀 읎늄을 전첎 큎러슀터 묎늬 사읎에서도 고유하게 짓는 것읎 (슉, 서로 닀륞 큎러슀터에 위치하더띌도) 몚범 사례읎닀.

반대로 워크로드 레벚읎 아닌, 하나의 테넌튞가 소유한 몚든 워크로드에 대핮 적용되는 정책도 있Ʞ 때묞에 테넌튾 레벚에서의 넀임슀페읎슀 적용도 장점읎 있닀. 귞러나 읎는 또 닀륞 묞제륌 제Ʞ한닀. 첫 번짞로 개별 워크로드에 대한 맞춀 정책을 적용하는 것읎 얎렵거나 불가능핎지며, 두 번짞로는 넀임슀페읎슀륌 적용받을 하나의 "테넌시" 레벚을 정하는 것읎 얎렀욞 수 있닀. 예륌 듀얎, 하나의 조직에 부서, 팀, 하위 팀읎 있닀고 하멎 ì–Žë–€ 닚위에 대핮 넀임슀페읎슀륌 적용핎알 하는가?

읎러한 묞제의 핎결책윌로, 넀임슀페읎슀륌 계잵윌로 정늬하고 특정 정책 및 늬소슀륌 사읎에서 공유할 수 있는 계잵적 넀임슀페읎슀 컚튞례러(HNC)륌 쿠버넀티슀에서 제공하고 있닀. 또한 넀임슀페읎슀 레읎랔 ꎀ늬, 넀임슀페읎슀 띌읎프사읎큎, ꎀ늬 위임, ꎀ렚된 넀임슀페읎슀 사읎에서 늬소슀 쿌터 공유와 같은 읎점도 있닀. 읎러한 Ʞ능은 닀쀑 팀 및 닀쀑 고객 시나늬였에서도 유용하닀.

유사한 Ʞ능을 제공하며 넀임슀페읎슀 늬소슀 ꎀ늬륌 돕는 닀륞 프로젝튞는 닀음곌 같닀.

닀쀑 팀 테넌시

닀쀑 고객 테넌시

정책 엔진

정책 엔진은 테넌튾 구성을 생성하고 검슝하는 Ʞ능을 제공한닀.

테넌튾 별 가상 컚튞례 플레읞

컚튞례 플레읞 격늬의 또 닀륞 형태로는 쿠버넀티슀 확장을 읎용하여 큎러슀터 전범위의 API 늬소슀륌 섞분화할 수 있는, 각 테넌튞에 가상 컚튞례 플레읞을 제공하는 형태읎닀. 데읎터 플레읞 격늬 Ʞ법을 읎러한 몚덞곌 핚께 읎용하여 테넌튾 간의 워컀 녞드륌 안전하게 ꎀ늬할 수 있닀.

가상 컚튞례 플레읞 Ʞ반의 멀티 테넌시 몚덞은 각 테넌튞에게 전용 컚튞례 플레읞 요소륌 제공하며 큎러슀터 전범위 늬소슀 및 애드옚 서비슀에 대한 완전한 제얎륌 부여하게 되얎 넀임슀페읎슀 êž°ë°˜ 멀티 테넌시륌 확장한닀. 워컀 녾드는 몚든 테넌튾 간 공유 되며, 음반적윌로 테넌튞에 의핎 접귌읎 불가능한 쿠버넀티슀 큎러슀터에 의핎 ꎀ늬된닀. 읎러한 큎러슀터륌 슈퍌 큎러슀터 (혹은 혞슀튞 큎러슀터)띌고 부륞닀. 테넌튞의 컚튞례 플레읞은 하위 컎퓚팅 늬소슀와 직접적윌로 연결된 것읎 아니Ʞ 때묞에 가상 컚튞례 플레읞 읎띌고 부륞닀.

가상 컚튞례 플레읞은 음반적윌로 쿠버넀티슀 API 서버, 컚튞례러 맀니저, etcd 데읎터 슀토얎로 구성되얎 있닀. 테넌튾 컚튞례 플레읞곌 슈퍌 큎러슀터 컚튞례 플레읞 간 변화륌 조정하는 메타데읎터 동Ʞ화 컚튞례러륌 통핎 슈퍌 큎러슀터와 상혞작용한닀.

하나의 API 서버륌 사용하였을 때 나타나는 격늬 묞제는 테넌튾 별 전용 컚튞례 플레읞을 읎용하멎 핎결된닀. 몇 가지 예시로는, 컚튞례 플레읞 낎의 소란슀러욎 읎웃 묞제, 잘못된 정책 섀정윌로 읞한 제얎불능 영향 반겜, 웹훅 및 CRD와 같은 큎러슀터 범위 였람젝튞 간의 충돌읎 있닀. 귞러므로 각 테넌튞가 쿠버넀티슀 API 서버에 대한 ì ‘ê·Œ 권한 및 완전한 큎러슀터 ꎀ늬 Ʞ능읎 필요한 겜우, 가상 컚튞례 플레읞 몚덞읎 적합하닀.

개선된 격늬의 대가는 각 테넌튾 별 가상 컚튞례 플레읞을 욎영하고 유지하는 비용에서 나타난닀. 추가적윌로, 각 테넌튾 컚튞례 플레읞은 녾드 레벚에서의 소란슀러욎 읎웃 묞제 또는 볎안 위협곌 같은 데읎터 플레읞에서의 격늬 묞제륌 핎결하지 못한닀. 읎러한 묞제에 대핎서는 별도로 대응핎알 한닀.

쿠버넀티슀 큎러슀터 API - 넀슀티드(CAPN) 프로젝튞는 가상 컚튞례 플레읞 구현 방식을 제공한닀.

읎왞의 구현 방식

읎 페읎지는 쿠버넀티슀가 필요로 하는 Ʞ능을 제공하는 썚드파티 프로젝튞 또는 제품에 대핮 얞꞉하고 있습니닀. 쿠버넀티슀 프로젝튞 저자듀은 읎러한 썚드파티 프로젝튞 또는 제품에 대핮 책임지지 않습니닀. CNCF 웹사읎튞 가읎드띌읞에서 더 자섞한 낎용을 확읞합니닀.

닀륞 썚드파티 링크륌 추가하는 변겜을 제안하Ʞ 전에, 컚텐잠 가읎드륌 확읞핎알 합니닀.

최종 수정 October 19, 2024 at 12:20 AM PST: [ko] Update the multi tenancy docs to remove reference to archived project (cd2341285d)