프로덕션에서 Kubernetes를 실행하는 데 필요한 6가지 중요한 사항
본문 바로가기
코딩(Coding)

프로덕션에서 Kubernetes를 실행하는 데 필요한 6가지 중요한 사항

by Emily Blunt 2022. 4. 26.
반응형

프로덕션에서 Kubernetes를 실행하는 데 필요한 6가지 중요한 사항

 

클러스터를 한 단계 업그레이드

Unsplash의 Thomas Millot 사진

Kubernetes 채택은 사상 최고입니다. 거의 모든 주요 IT 조직은 컨테이너 전략에 투자하고 Kubernetes는 단연 가장 많이 사용되고 가장 인기 있는 컨테이너 오케스트레이션 기술입니다.

Kubernetes에는 다양한 종류가 있지만 AKS, EKS 및 GKE와 같은 관리형 솔루션이 단연 가장 많이 사용됩니다. Kubernetes는 매우 복잡한 플랫폼이지만 관리형 클라우드 솔루션을 선택하는 한 Kubernetes 클러스터를 설정하는 것은 상당히 쉽습니다. 매우 타당한 이유가 없는 한 Kubernetes 클러스터를 자체 관리하는 것을 권장하지 않습니다.

Kubernetes를 실행하면 많은 이점이 있지만 강력한 Kubernetes 지식 없이 직접 견고한 플랫폼을 설정하려면 시간이 걸립니다. 모범 사례에 따라 Kubernetes 스택을 설정하려면 전문 지식이 필요하며 미래에 대비할 수 있는 안정적인 클러스터를 설정하는 데 필요합니다. 관리형 클러스터를 실행하고 애플리케이션을 배포하는 것만으로는 충분하지 않습니다.

프로덕션 준비 Kubernetes 클러스터를 실행하려면 몇 가지 추가 사항이 필요합니다. 좋은 Kubernetes 설정은 개발자의 삶을 훨씬 더 쉽게 만들고 비즈니스 가치 제공에 집중할 시간을 제공합니다. 이 기사에서는 프로덕션 환경에서 Kubernetes 스택을 실행하는 데 필요한 가장 중요한 사항을 공유합니다.

우선, Desired State 구성(Infrastructure as Code — IaC)을 사용하여 클라우드 인프라를 관리하면 많은 이점이 있으며 일반적인 클라우드 인프라 모범 사례입니다.

선언적으로 지정하기 코드로 비프로덕션 환경에서 인프라(변경 사항)를 테스트할 수 있습니다. 수동 배포를 방지하거나 방지하여 인프라 배포를 보다 일관되고 안정적이며 반복 가능하게 만듭니다.

IaC를 구현하는 팀은 보다 안정적인 환경을 신속하고 대규모로 제공합니다. Terraform 또는 Pulumi와 같은 IaC 도구는 네트워킹, 로드 밸런서, DNS 구성 및 통합 Container Registry와 함께 선택한 클라우드에 전체 Kubernetes 클러스터를 배포하는 데 유용합니다.

Kubernetes는 매우 안정적인 플랫폼입니다. 자체 치유 기능으로 많은 문제를 해결할 수 있으며 어디를 살펴봐야 할지 모를 경우 알아차리지 못할 수도 있습니다. 그러나 이것이 모니터링이 중요하지 않다는 것을 의미하지는 않습니다. 적절한 모니터링 없이 프로덕션을 실행하는 팀을 보았는데 갑자기 인증서가 만료되거나 노드 메모리 오버커밋으로 인해 중단이 발생했습니다.

적절한 모니터링을 통해 이러한 오류를 쉽게 예방할 수 있습니다. Prometheus 및 Grafana는 Kubernetes에서 가장 많이 사용되는 모니터링 솔루션이며 모니터링에 사용할 수 있습니다. 플랫폼과 애플리케이션 모두. 알림(예: Alertmanager 사용)은 Kubernetes 클러스터의 중요한 문제에 대해 설정해야 다운타임, 오류 또는 데이터 손실을 방지할 수 있습니다.

메트릭을 사용한 모니터링 외에도 Fluentd 또는 Filebeat와 같은 중앙 집중식 구성 요소를 실행하여 로깅을 수집하고 이를 ElasticSearch와 같은 중앙 집중식 로깅 플랫폼으로 보내 애플리케이션 오류 로그 및 로그 이벤트를 중앙에서 추적할 수 있도록 하는 것도 중요합니다. 이러한 도구는 중앙에서 설정할 수 있으므로 개발자의 노력 없이 모든 앱에 대해 표준 모니터링이 자동으로 수행됩니다.

Kubernetes에는 Ingress라는 개념이 있습니다. Kubernetes 외부에서 애플리케이션으로 트래픽이 흐르는 방식을 설명하는 간단한 구성입니다. 중앙 수신 컨트롤러(예: Nginx)를 클러스터에 설치하여 모든 애플리케이션에 대한 모든 수신 트래픽을 관리할 수 있습니다. 인그레스 컨트롤러가 공용 Cloud LoadBalancer에 연결되면 모든 트래픽이 노드 간에 자동으로 로드 밸런싱되고 올바른 팟(Pod) IP 주소로 전송됩니다.

수신 컨트롤러는 중앙 집중화로 인해 많은 이점을 제공합니다. HTTPS 및 SSL도 처리할 수 있습니다. cert-manager라는 통합 구성 요소는 HTTPS 인증서를 처리하는 Kubernetes의 중앙 배포 애플리케이션입니다.

Let's Encrypt, 와일드카드 인증서 또는 내부 회사에서 신뢰할 수 있는 인증서에 대한 사설 인증 기관을 사용하여 구성할 수 있습니다. 들어오는 모든 트래픽은 HTTPS 인증서를 사용하여 자동으로 암호화되고 올바른 Kubernetes 포드로 전달됩니다. 개발자가 걱정할 필요가 없는 또 다른 사항입니다.

모든 사람이 Kubernetes 관리자가 되어서는 안 됩니다. Kubernetes 액세스와 관련하여 항상 최소 권한 원칙을 적용해야 합니다. 역할 기반 접근 제어는 전체 Kubernetes 스택(Kubernetes API, 배포 도구, 대시보드 등)에 적용되어야 합니다.

Kubernetes를 Keycloak, Azure AD 또는 AWS Cognito와 같은 IAM 솔루션과 통합하면 플랫폼 도구와 애플리케이션 모두에 대해 OAuth3/OIDC를 사용하여 인증 및 권한 부여를 중앙에서 관리할 수 있습니다. 역할 및 그룹을 정의하여 사용자에게 팀 또는 역할에 따라 액세스해야 하는 리소스에 대한 액세스 권한을 부여할 수 있습니다.

Kubernetes로 작업하는 모든 사람은 다음을 사용합니다. kubectl 어떤 방법으로든. 그러나 다음을 사용하여 Kubernetes에 수동으로 배포 kubectl apply 명령은 모범 사례가 아니며 프로덕션 환경에서는 가장 확실하지 않습니다.

Kubernetes 원하는 상태 구성이 GIT에 있어야 하며 Kubernetes로 롤아웃하는 배포 플랫폼이 필요합니다. ArgoCD와 Flux는 Kubernetes 배포를 위한 두 가지 주요 GitOps 플랫폼입니다. 둘 다 실시간 선언적 상태 관리를 처리하는 데 매우 잘 작동하여 Git이 Kubernetes 상태에 대한 단일 정보 소스인지 확인합니다.

불량 개발자가 프로덕션에서 수동으로 무언가를 변경하려고 하는 경우에도 GitOps 플랫폼은 변경 사항을 원하는 변경 사항으로 즉시 롤백합니다. GitOps 부트스트래핑 기술을 사용하여 환경, 팀, 프로젝트, 역할, 정책, 네임스페이스, 클러스터, 앱 그룹 및 애플리케이션을 관리할 수 있습니다. 힘내에서만. GitOps는 모든 Kubernetes 환경에 대한 모든 변경 사항이 100% 추적 가능하고 쉽게 자동화되고 관리 가능하도록 합니다.

Kubernetes 비밀 매니페스트는 환경 변수 또는 파일 매핑으로 비밀을 컨테이너에 주입하는 데 사용됩니다. 모든 사람이 특히 프로덕션 환경에서 모든 비밀에 액세스할 수 있는 것은 아닙니다. 팀 구성원 및 애플리케이션의 비밀에 대한 역할 기반 액세스 제어를 사용하는 것은 보안 모범 사례입니다.

비밀은 CI/CD 도구를 사용하여 Kubernetes에 주입하거나 (더 나쁘게는) 로컬 개발 환경을 통해 주입할 수 있지만 이로 인해 구성 상태 드리프트가 발생할 수 있습니다. 이것은 추적할 수 없고 쉽게 관리할 수 없습니다. 비밀을 동기화하는 가장 좋은 방법은 외부 비밀 운영자와 같은 중앙 비밀 운영자와 함께 Azure Key Vault, Hashicorp Vault, AWS Secrets Manager와 같은 중앙 볼트를 사용하는 것입니다.

이런 식으로 비밀 참조는 외부 비밀 볼트의 항목을 가리키는 GIT에 저장할 수 있습니다. 보안에 더 중점을 둔 회사의 경우 RBAC를 사용하여 Kubernetes의 비밀에서 모든 개발자를 잠그는 옵션이기도 합니다. 그들은 비밀을 참조하고 컨테이너에서 사용할 수 있지만 직접 액세스할 수는 없습니다.

관리형 Kubernetes 클러스터를 스핀업하는 것은 쉽지만 전문 지식이 없으면 올바르게 설정하는 데 시간이 걸립니다. 좋은 코드로서의 인프라 솔루션, 적절한 모니터링, RBAC 및 안전하고 관리 가능하며 추적 가능한 배포 메커니즘을 갖추는 것이 매우 중요합니다. 빠를수록 좋습니다. 표준화된 오픈 소스 도구를 사용하여 모범 사례에 따라 Kubernetes 클러스터를 설정하면 특히 장기적으로 시간, 실패 및 골칫거리를 절약하는 데 도움이 됩니다. 물론 이는 특히 엔터프라이즈 수준 회사의 경우 Kubernetes 스택에 대한 가장 기본적인 요구 사항입니다. 언급되지 않은 다른 중요한 고려 사항은 ServiceMesh, 보안 스캐닝/컴플라이언스, 종단 간 추적 가능성이며, 이에 대해서는 향후 기사에서 논의될 것입니다.

Pionative Kubernetes QuickStart 패키지는 최신 오픈 소스 표준/모범 사례에 따라 필요한 모든 기본 사항과 기초를 제공하고 시간과 비용을 절약해 줍니다. 도움이 필요하거나 조언이 필요하거나 간단한 채팅이 필요하면 언제든지 기꺼이 도와드리겠습니다. LinkedIn에서 저와 자유롭게 연락하세요!

반응형

댓글0