OCI 배스천 및 GitHub 작업을 사용하여 개인 OKE 클러스터에 애플리케이션 배치
Oracle Cloud Infrastructure Bastion 세션과 GitHub Actions를 효과적으로 활용하여 보안, 규제 준수, 네트워크 격리 및 제어와 같은 다양한 요인으로 인해 필요할 때 전용 Oracle Cloud Infrastructure Kubernetes Engine(OKE) 클러스터에 배포하는 방법을 알아봅니다.
OKE는 확장 가능한 고가용성 완전 관리형 서비스로, 컨테이너형 애플리케이션을 클라우드에 배치하는 데 사용할 수 있습니다.
GitHub 작업은 GitHub에서 제공하는 강력한 워크플로우 자동화 및 CI/CD(지속적 통합/지속적 배포) 플랫폼입니다. YAML 구문을 사용하여 사용자정의 워크플로우를 정의할 수 있습니다. 이 구문은 코드 푸시, 풀 요청 또는 스케줄링된 태스크와 같은 다양한 이벤트에 의해 트리거될 수 있습니다.
이 참조 아키텍처는 OCI Bastion 세션 및 GitHub Actions의 활용률을 탐색하여 개인 OKE 클러스터에 배포합니다.
구조
이 참조 아키텍처는 프라이빗 OKE 클러스터에 쉽게 배치할 수 있도록 OCI Bastion 및 GitHub Actions의 통합을 보여줍니다.
개인 OKE 클러스터는 외부 네트워크에서 액세스할 수 없습니다. K8s API 프라이빗 끝점에 액세스하기 위해 SSH 포트 전달 OCI Bastion 세션이 설정됩니다. 이 설정을 사용하면 kubectl
명령을 실행하여 클러스터 내에서 다양한 배치 작업을 수행할 수 있습니다.
코드를 저장소에 푸시하면 GitHub 작업 워크플로우가 자동으로 트리거됩니다. 워크플로우 실행 중 OCI Bastion 세션이 생성되고 배포 작업을 실행하기 위해 전용 K8s API 엔드포인트에 연결하는 데 사용됩니다.
워크플로우가 완료되면 OCI Bastion 세션이 삭제됩니다. 이 접근 방식은 매우 안전하고 효율적인 배포 프로세스를 보장합니다. 또한 이 워크플로우는 지속적인 통합 작업을 실행하기 위한 프레임워크 역할을 하며 특정 개발 프로세스 및 요구 사항에 맞게 추가로 조정할 수 있습니다.
다음 다이어그램은 이 참조 아키텍처를 보여 줍니다.
oke-bastion-deployment-다이어그램-oracle.zip
시작하기 전에
- 프라이빗 서브넷에 구성된 Kubernetes API 끝점 및 작업자 노드로 OKE 클러스터를 프로비전합니다.
주:
프라이빗 Kubernetes API 끝점은 OCI Bastion 포트 전달 세션을 설정하는 데 사용됩니다. - 생성된 OCI 배스천 서비스에서 OKE VCN을 대상 VCN으로, OKE 노드 서브넷을 대상 서브넷으로 설정하십시오.
- 필요한 IAM 서비스 정책을 설정합니다.
주:
필요한 IAM 정책을 설정하려면 클러스터 생성 및 배치를 위한 정책 구성에 대한 링크는 자세히 탐색을 참조하십시오.
구조에는 다음과 같은 구성 요소가 있습니다.
- Tenancy
테넌시는 Oracle Cloud Infrastructure에 등록할 때 Oracle이 Oracle Cloud 내에서 설정하는 격리된 보안 분할영역입니다. 테넌시 내 Oracle Cloud에서 리소스를 생성, 구성 및 관리할 수 있습니다. 테넌시는 회사 또는 조직과 동의어입니다. 일반적으로 회사는 단일 테넌시를 가지며 해당 테넌시 내의 조직 구조를 반영합니다. 단일 테넌시는 대개 단일 구독과 연관되며, 단일 구독에는 일반적으로 하나의 테넌시만 포함됩니다.
- 지역
Oracle Cloud Infrastructure 리전은 가용성 도메인이라고 하는 데이터 센터가 하나 이상 포함된 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).
- 구획
구획은 Oracle Cloud Infrastructure 테넌시 내의 지역 간 논리적 파티션입니다. 구획을 사용하여 Oracle Cloud 리소스에 대한 사용 할당량을 구성, 제어 및 설정할 수 있습니다. 지정된 구획에서 액세스를 제어하고 리소스에 대한 권한을 설정하는 정책을 정의합니다.
- 가용성 도메인
가용성 도메인은 한 지역 내의 독립형 독립 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 결함 허용을 제공하는 다른 가용성 도메인의 리소스와 격리됩니다. 가용성 도메인은 전원, 냉각 또는 내부 가용성 도메인 네트워크와 같은 인프라를 공유하지 않습니다. 따라서 한 가용성 도메인의 장애가 해당 영역의 다른 가용성 도메인에 영향을 미치지 않아야 합니다.
- 결함 도메인
장애 도메인은 가용성 도메인 내의 하드웨어 및 인프라 그룹입니다. 가용성 도메인에는 독립적인 전원 및 하드웨어를 갖춘 3개의 장애 도메인이 있습니다. 여러 결함 도메인에 리소스를 분배할 때 응용 프로그램은 결함 도메인 내의 물리적 서버 오류, 시스템 유지 관리 및 전원 오류를 허용할 수 있습니다.
- VCN(가상 클라우드 네트워크) 및 서브넷
VCN은 Oracle Cloud Infrastructure 지역에서 설정한 맞춤형 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷 생성 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.
- 로드 밸런서
Oracle Cloud Infrastructure Load Balancing 서비스는 단일 시작점에서 백엔드에 있는 여러 서버로 트래픽을 자동으로 배포합니다.
- 보안 목록
각 서브넷에 대해 서브넷에 들어오고 나가도록 허용해야 하는 트래픽의 소스, 대상 및 유형을 지정하는 보안 규칙을 생성할 수 있습니다.
- NAT(Network Address Translation) 게이트웨이
NAT 게이트웨이를 사용하면 VCN의 전용 리소스가 수신 인터넷 연결에 이러한 리소스를 노출시키지 않고 인터넷의 호스트에 액세스할 수 있습니다.
- 서비스 게이트웨이
서비스 게이트웨이는 VCN에서 Oracle Cloud Infrastructure Object Storage와 같은 다른 서비스로의 액세스를 제공합니다. VCN에서 Oracle 서비스로의 트래픽은 Oracle 네트워크 패브릭을 통해 이동하며 인터넷을 순회하지 않습니다.
- Cloud Guard
Oracle Cloud Guard를 사용하여 Oracle Cloud Infrastructure에서 리소스의 보안을 모니터링하고 유지 관리할 수 있습니다. Cloud Guard는 정의 가능한 감지자 레시피를 사용하여 리소스에서 보안 취약점을 검사하고 운영자 및 사용자에게 특정 위험한 작업을 모니터합니다. 잘못 구성되거나 안전하지 않은 작업이 감지되면 Cloud Guard는 정의할 수 있는 응답기 레시피를 기반으로 수정 조치를 권장하고 해당 작업을 수행하는 데 도움을 줍니다.
- 보안 영역
보안 영역은 데이터를 암호화하고 전체 구획의 네트워크에 대한 공용 액세스를 방지하는 등의 정책을 적용하여 처음부터 Oracle의 보안 모범 사례를 보장합니다. 보안 영역은 동일한 이름의 컴파트먼트와 연관되며, 컴파트먼트 및 해당 하위 컴파트먼트에 적용되는 보안 영역 정책 또는 "레시피"를 포함합니다. 표준 구획을 추가하거나 보안 영역 구획으로 이동할 수 없습니다.
- Kubernetes Engine
Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 또는 OKE)는 컨테이너화된 애플리케이션을 클라우드에 배포하는 데 사용할 수 있는 확장 가능한 고가용성 완전 관리형 서비스입니다. 애플리케이션에 필요한 컴퓨트 리소스를 지정하면 Kubernetes Engine이 기존 테넌시의 Oracle Cloud Infrastructure에서 프로비저닝합니다. OKE는 Kubernetes를 사용하여 호스트 클러스터 전반에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화합니다.
- 배스천 서비스
Oracle Cloud Infrastructure Bastion은 퍼블릭 엔드포인트가 없고 베어메탈 및 가상 머신, Oracle MySQL Database Service, Autonomous Transaction Processing(ATP), Oracle Cloud Infrastructure Kubernetes Engine(OKE) 및 SSH(Secure Shell Protocol) 액세스를 허용하는 기타 리소스와 같은 엄격한 리소스 액세스 제어가 필요한 리소스에 대해 제한적이고 시간 제한적인 보안 액세스를 제공합니다. OCI Bastion 서비스를 사용하면 점프 호스트를 배포 및 유지 관리하지 않고도 개인 호스트에 대한 액세스를 활성화할 수 있습니다. 또한 ID 기반 권한과 중앙 집중식, 감사 및 시간 제한 SSH 세션을 통해 보안 상태를 개선할 수 있습니다. OCI Bastion은 배스천 액세스를 위한 공용 IP가 필요하지 않으므로 원격 액세스를 제공할 때 번거롭고 잠재적인 공격 표면을 제거합니다.
권장사항
- VCN
VCN을 생성할 때 VCN의 서브넷에 연결하려는 리소스 수에 따라 필요한 CIDR 블록 수와 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.
프라이빗 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.
VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.
서브넷을 설계할 때는 트래픽 플로우 및 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 동일한 서브넷에 연결합니다. 이 서브넷은 보안 경계 역할을 할 수 있습니다.
- Cloud Guard
사용자정의 감지기 및 응답기 레시피를 생성하도록 Oracle에서 제공하는 기본 레시피를 복제 및 사용자정의합니다. 이러한 레시피를 통해 경고를 생성하는 보안 위반 유형과 경고에 대해 수행할 수 있는 작업을 지정할 수 있습니다. 예를 들어 가시성이 퍼블릭으로 설정된 오브젝트 스토리지 버킷을 감지할 수 있습니다.
테넌시 레벨에서 Cloud Guard를 적용하여 가장 광범위한 범위를 다루고 여러 구성을 유지 관리하는 데 따르는 관리 부담을 줄이십시오.
관리 목록 기능을 사용하여 감지기에 특정 구성을 적용할 수도 있습니다.
- 배스천
OCI Bastion은 권한이 부여된 사용자가 SSH(Secure Shell) 세션을 사용하여 특정 IP 주소에서 대상 리소스로 연결할 수 있게 해줍니다. 권한이 부여된 사용자만 배스천 서비스 및 세션을 생성할 수 있는 액세스 권한이 있는지 확인하십시오. 배스천에 대한 액세스는 권한이 부여된 사용자에게만 제공되어야 합니다.
- OKE(Kubernetes Engine)
필요한 IAM 정책이 생성되고 권한이 부여된 사용자만 클러스터 리소스에 액세스할 수 있는지 확인하십시오. 보안 상태를 개선하려면 추가 모니터링 및 로깅을 사용으로 설정해야 합니다.
고려사항
이 참조 아키텍처를 배치할 때는 다음 사항을 고려하십시오.
- OKE 확장성
로드에 따라 Kubernetes 클러스터의 워커 노드 수를 업데이트하여 애플리케이션을 스케일 아웃할 수 있습니다. 마찬가지로 클러스터의 워커 노드 수를 줄여 확장할 수 있습니다. Kubernetes 클러스터에서 서비스를 생성할 때 로드 밸런서를 생성하여 해당 서비스에 할당된 노드 간에 서비스 트래픽을 분산할 수 있습니다.
- 애플리케이션 가용성
장애 도메인은 단일 가용성 도메인 내에서 최고의 복원성을 제공합니다. 여러 가용성 도메인에서 동일한 작업을 수행하는 인스턴스 또는 노드를 배치할 수도 있습니다. 이 설계에서는 중복성을 도입하여 단일 Failure 지점을 제거합니다.
- 보안
어떤 OCI 리소스에 액세스할 수 있는 사용자 및 리소스에 액세스할 수 있는 방법을 제한하는 정책을 사용합니다.
OKE는 Oracle Cloud Infrastructure Identity and Access Management(IAM)와 통합되어 있습니다. IAM은 네이티브 OCI ID 기능을 통해 손쉬운 인증을 제공합니다.
배치
GitHub 작업 워크플로우 코드는 GitHub에서 사용할 수 있습니다.
- GitHub으로 이동합니다.
- 저장소를 복제하거나 로컬 컴퓨터에 다운로드합니다.
README
문서의 지침을 따릅니다.