Talos Linux 기반 보안 쿠버네티스 클러스터 설치 가이드

💡 핵심 요약 (Executive Summary)

본 가이드는 Talos Linux 불변 OS 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents

Binary Installation

mac
bash
brew install siderolabs/tap/talosctl

echo 'source <(talosctl completion zsh)' | tee -a ~/.zshrc

#if using colima
sudo ln -s "$HOME/.colima/default/docker.sock" /var/run/docker.sock
#if using docker-desktop
sudo ln -s "$HOME/.docker/run/docker.sock" /var/run/docker.sock

Testing Cluster Management

Cluster Init
bash
# docker 기반 cluster 생성
talosctl cluster create
# 클러스터 및 노드 정보
talosctl cluster show

# 클러스터 인증생성: admin@talos-default context 생성 후 내 kubeconfig에 추가
talosctl kubeconfig --nodes $ep_or_nodename

# kubeconfig 수정 (proxy Point로 변경)
yq -i "(.clusters[] | select(.name==\"talos-default\") | .cluster.server) 
    = \"$(talosctl cluster show | grep 'KUBERNETES ENDPOINT' | awk '{print $3}')\"
" ~/.kube/config
Cluster Destroy
bash
export default_context=rancher-desktop
talosctl cluster destroy

# kubeconfig cleanning
yq -i 'del(.clusters[] | select(.name=="talos-default"))' ~/.kube/config
yq -i 'del(.contexts[] | select(.name=="admin@talos-default"))' ~/.kube/config
yq -i 'del(.users[] | select(.name=="admin@talos-default"))' ~/.kube/config
yq -i ".[\"current-context\"]=\"${default_context}\"" ~/.kube/config

Production Cluster Management

1단계: 인프라 준비

프로덕션 클러스터 인프라를 생성하려면 다음을 수행하세요.

  1. Talos ISO 이미지를 사용하여 머신 부팅
  2. 노드에서 네트워크 액세스를 보장합니다.

각 단계를 수행하는 방법은 다음과 같습니다.

Talos ISO 이미지를 사용하여 컴퓨터 부팅

Talos ISO 이미지를 사용하여 컴퓨터를 부팅하려면 다음 단계를 따르세요.

  1. Talos Image Factory

    에서 하드웨어 유형에 따라 인프라에 맞는 최신 ISO를 다운로드하세요 .

참고: 네트워크 부팅 및 공개 커널을 사용한 자체 빌드 미디어의 경우, 몇 가지 필수 커널 매개변수가 있습니다. 자세한 내용은 [커널 문서](https://docs.siderolabs.com/talos/v1.11/reference/kernel) ‘시작하기’를 참조하세요.

시작하기’를 참조하세요.

  1. 방금 다운로드한 ISO 이미지를 사용하여 세 개의 제어 평면을 부팅합니다.
  2. 추가 머신을 워커 노드로 부팅합니다.
네트워크 액세스 보장

노드가 방화벽 뒤에 있거나, 개인 네트워크에 있거나, 기타 이유로 직접 접근할 수 없는 경우 Talos API 액세스를 위해 노드에 도달하려면 TCP 포트 50000을 전달하도록 로드 밸런서를 구성해야 합니다.

참고: Talos Linux API는 gRPC와 상호 TLS를 사용하므로 HTTP/S 프록시를 통해 프록시할 수 없으며 TCP 부하 분산 장치를 통해서만 프록시할 수 있습니다.

제어 평면과 작업자 노드가 부팅되면 다음으로 Kubernetes 엔드포인트를 구성합니다.

2단계: IP 주소를 변수에 저장

컴퓨터의 IP 주소에 대한 변수를 저장하려면:

  1. 제어 평면과 생성한 모든 작업자 노드를 포함하여 각 머신 콘솔에 표시된 IP 주소를 복사합니다.

    디스플레이가 연결되어 있지 않으면 DHCP 서버에서 IP 주소를 검색하세요.

  2. 제어 평면 노드 IP 주소에 대한 Bash 배열을 만들고, 각 자리 표시자를 제어 평면 노드의 IP 주소로 바꿉니다. 필요한 만큼 IP 주소를 포함할 수 있습니다.

bash
CONTROL_PLANE_IP=("<control-plane-ip-1>" "<control-plane-ip-2>" "<control-plane-ip-3>")

예를 들어: 제어 평면 노드의 IP 주소가 192.168.0.2, 192.168.0.3, 192.168.0.4 이면 명령은 다음과 같습니다.

bash
CONTROL_PLANE_IP=("192.168.0.2" "192.168.0.3" "192.168.0.4")
  1. 워커 노드가 있는 경우 IP 주소를 Bash 배열에 저장합니다. 각 자리 표시자를 워커 노드의 실제 IP 주소로 바꾸세요. 필요한 만큼 IP 주소를 포함할 수 있습니다.
bash
WORKER_IP=("<worker-ip-1>" "<worker-ip-2>" "<worker-ip-3>")
3단계: Kubernetes 엔드포인트 결정

고가용성을 위해 여러 개의 제어 평면을 설정했지만 Kubernetes API 서버 엔드포인트가 모든 제어 평면 노드에 도달할 수 있는 경우에만 진정한 고가용성이 제공됩니다.

이를 구성하는 두 가지 일반적인 방법은 다음과 같습니다.

  • 전용 로드 밸런서: 제어 평면 노드로 라우팅되는 전용 로드 밸런서를 설정합니다.
  • DNS 레코드: 모든 제어 평면 노드를 가리키는 여러 DNS 레코드를 만듭니다.

이를 사용하면 설정 중에 모든 제어 평면 노드로 연결되는 하나의 IP 주소나 DNS 이름을 전달할 수 있습니다.

각 옵션을 구성하는 방법은 다음과 같습니다.

전용 로드 밸런서

클라우드 공급자를 사용하거나 자체 로드 밸런서(예: HAProxy, NGINX 역방향 프록시 또는 F5 로드 밸런서)가 있는 경우 전용 로드 밸런서를 설정하는 것이 자연스러운 선택입니다.

또한 Omni로 클러스터를 생성한 경우 Omni가 자동으로 Kubernetes 엔드포인트의 로드 밸런서가 된다는 점도 알아두는 것이 중요합니다 .

TCP 포트 6443에서 수신하고 Talos 제어 평면 노드의 주소로 트래픽을 전달하도록 프런트엔드를 구성합니다.

Kubernetes 엔드포인트는 로드 밸런서 프런트엔드의 IP 주소 또는 DNS 이름에 포트를 붙인 형식입니다(예: https://myK8s.mydomain.io:6443)

참고: Kubernetes API 서버가 TLS 종료 및 상호 TLS 인증을 처리하므로 HTTP 로드 밸런서를 사용할 수 없습니다.

DNS 레코드

또한 DNS 레코드를 사용하여 Kubernetes 엔드포인트를 구성할 수 있습니다. 각 제어 평면에 대해 하나씩 여러 개의 A 또는 AAAA 레코드를 DNS 이름에 추가하기만 하면 됩니다.

예를 들어 다음을 추가할 수 있습니다.

txt
kube.cluster1.mydomain.com  IN  A  192.168.0.10
kube.cluster1.mydomain.com  IN  A  192.168.0.11
kube.cluster1.mydomain.com  IN  A  192.168.0.12

그러면 종료점은 다음과 같습니다.

txt
https://kube.cluster1.mydomain.com:6443
Reference & Guidelines (NOTE)

참고 : 이 엔드포인트는 재부팅 등으로 KubePrism을 사용할 수 없게 될 경우 대체 수단으로 사용됩니다 . 또한 다른 검색 서비스를 사용할 수 없는 경우에도 Talos 노드가 제어 평면을 계속 찾아 통신할 수 있도록 보장합니다.

4단계: 변수에 엔드포인트 저장

3단계에서 선택한 엔드포인트를 저장할 변수를 설정합니다. 플레이스홀더를 실제 엔드포인

bash
export YOUR_ENDPOINT=<your_endpoint>
5단계: 비밀 번들 생성

비밀 번들은 Talos Linux 클러스터를 보호하는 데 필요한 모든 암호화 키, 인증서 및 토큰이 포함된 파일입니다.

비밀 번들을 생성하려면 다음을 실행하세요.

bash
talosctl gen secrets -o secrets.yaml
6단계: 머신 구성 생성

다음 단계에 따라 머신 구성을 생성하세요.

  1. 다음 명령을 실행하여 클러스터 이름에 대한 변수를 설정합니다. 을 클러스터에 지정하려는 이름으로 바꾸세요.
bash
export CLUSTER_NAME=<your_cluster_name>
  1. 비밀 번들을 사용하여 머신 구성 파일을 생성하려면 다음 명령을 실행하세요.
bash
talosctl gen config --with-secrets secrets.yaml $CLUSTER_NAME https://$YOUR_ENDPOINT:6443

이 명령은 세 개의 파일을 생성합니다.

  • controlplane.yaml: 제어 평면에 대한 구성입니다.
  • worker.yaml: 워커 노드에 대한 구성입니다.
  • talosconfig: talosctl이 클러스터에 연결하고 인증하는 데 사용되는 구성 파일입니다.
7단계: ISO 마운트 해제

모든 제어 플레인과 워커 노드에서 설치용 USB 드라이브를 분리하거나 ISO를 마운트 해제하세요. 이렇게 하면 실수로 USB 드라이브에 설치하는 것을 방지하고 어떤 디스크를 설치해야 할지 더 명확하게 알 수 있습니다.

8단계: 노드 이해

일반적으로 제어 플레인 및 워커 노드의 기본 머신 구성은 클러스터를 실행하기에 충분합니다. 하지만 특정 환경에 따라 네트워크 인터페이스 및 디스크 구성과 같은 특정 설정을 사용자 지정해야 할 수도 있습니다.

다음 단계에 따라 머신 구성이 올바르게 설정되었는지 확인하세요.

  1. 네트워크 인터페이스 확인: 이 명령을 실행하면 제어 평면이든 작업자든 모든 노드의 모든 네트워크 인터페이스를 볼 수 있습니다.
    검사하려는 노드의 IP로 바꾸세요.
    참고 : 작동 상태(OPER) 값이 up
    인 네트워크 ID를 복사합니다 .
bash
talosctl --nodes <node-ip-address> get links --insecure
  1. 사용 가능한 디스크 확인: 이 명령을 실행하여 모든 노드에서 사용 가능한 모든 디스크를 확인하세요. 을 검사하려는 노드의 IP 주소로 바꾸세요.
bash
talosctl get disks --insecure --nodes <node-ip-address>
  1. 구성 파일 확인: 원하는 편집기에서 worker.yaml, controlplane.yaml구성 파일을 엽니다.

    값이 작업자 및 제어 평면 노드의 네트워크 및 디스크 설정과 일치하는지 확인합니다. 값이 일치하지 않으면 머신 구성을 업데이트해야 합니다.

Reference & Guidelines (NOTE)

참고: 노드와 클러스터에 대한 자세한 정보를 수집하기 위한 추가 명령은 Talos CLI 참조를 참조하세요 .

9단계: 머신 구성 패치(선택 사항)

작업자 및 제어 평면 머신 구성에 패치를 적용하여 제어 평면 노드의 올바른 네트워크 인터페이스와 디스크를 반영할 수 있습니다.

다음 단계에 따라 머신 구성에 패치를 적용하세요.

  1. 수정하려는 구성에 대한 패치 파일을 만듭니다.
bash
touch controlplane-patch-1.yaml # For patching the control plane nodes configuration
   touch worker-patch-1.yaml # For patching the worker nodes configuration

참고: 두 개의 패치 파일을 모두 만들 필요는 없습니다. 실제로 수정해야 하는 구성에 대한 패치만 만드세요.

동일한 머신 구성에 대해 여러 개의 후속 패치를 만들려면 여러 개의 패치 파일(예: controlplane-patch-2.yaml, controlplane-patch-3.yaml) 을 만들 수도 있습니다 .

  1. 이 YAML 코드 블록을 복사하여 붙여넣고 각 패치 파일에 올바른 하드웨어 값을 추가합니다.

    예를 들어, controlplane-patch-1제어 평면 노드에서 수집한 네트워크 인터페이스 및 디스크 정보를 사용하려면 다음을 수행합니다.

bash
# controlplane-patch-1 file
   machine:
     network:
       interfaces:
         - interface: <control-plane-network-interface>  # From control plane node
           dhcp: true
     install:
       disk: /dev/<control-plane-disk-name> # From control plane node

worker-patch-1.yaml의 경우, 작업자 노드의 네트워크 인터페이스 및 디스크 정보를 사용합니다.

bash
# worker-patch-1.yaml file
   machine:
     network:
       interfaces:
         - interface: <worker-network-interface>  # From worker node
           dhcp: true
     install:
       disk: /dev/<worker-disk-name> # From worker node
  1. 다양한 머신 구성에 맞게 다양한 패치 파일을 적용합니다.
    – for Control-plane
bash
talosctl machineconfig patch controlplane.yaml --patch @controlplane-patch-1.yaml --output controlplane.yaml
  • for Worker
bash
talosctl machineconfig patch worker.yaml --patch @worker-patch-1.yaml --output worker.yaml

또한, 구성 패치 설명서에서 패치 에 대해 자세히 알아볼 수 있습니다 .

10단계: 멀티홈 머신 구성

머신이 멀티홈(즉, 루프백 주소 외에 두 개 이상의 IPv4 및/또는 IPv6 주소를 갖는 경우)인 경우 추가 구성이 필요합니다. 자세한 내용은 멀티호밍을 참조하세요.

11단계: 머신 구성 적용

머신 구성을 적용하려면:

  1. 다음 명령을 실행하여 controlplane.yaml 구성을 제어 평면 노드에 적용합니다 .
bash
for ip in "${CONTROL_PLANE_IP[@]}"; do
     echo "=== Applying configuration to node $ip ==="
     talosctl apply-config --insecure \
       --nodes $ip \
       --file controlplane.yaml
     echo "Configuration applied to $ip"
     echo ""
   done
  1. 다음 명령을 실행하여 작업자 노드에 worker.yaml 구성을 적용합니다 .
bash
for ip in "${WORKER_IP[@]}"; do
     echo "=== Applying configuration to node $ip ==="
     talosctl apply-config --insecure \
       --nodes $ip \
       --file worker.yaml
     echo "Configuration applied to $ip"
     echo ""
   done
12단계: Talos 구성 파일 관리

talosconfig는 Talos Linux 클러스터를 관리하는 열쇠입니다. 이것이 없으면 talosctl을 사용하여 클러스터 노드를 인증하거나 통신할 수 없습니다.

다음을 관리하는 데에는 두 가지 옵션이 있습니다.

  1. 새 talosconfig파일을 ~/.talos/config위치에 있는 기본 구성 파일에 병합합니다 

    bash
    talosctl config merge ./talosconfig
  2. Copy the configuration file to your ~/.talos directory and set the TALOSCONFIG environment variable
  3. 구성 파일을 ~/.talos 디렉토리에 복사하고 TALOSCONFIG 환경 변수를 설정합니다

    bash
    mkdir -p ~/.talos
    cp ./talosconfig ~/.talos/config
    export TALOSCONFIG=~/.talos/config
13단계: 제어 평면 노드의 엔드포인트 설정

개별 노드를 사용할 수 없게 되면 talosctl이 자동으로 요청에 대한 부하를 분산하고 제어 평면 노드 간에 장애 조치를 수행할 수 있도록 엔드포인트를 구성합니다.

다음 명령을 실행하여 엔드포인트를 구성하세요. 를 제어 플레인 노드의 IP 주소로 바꾸세요.

bash
talosctl config endpoint <control_plane_IP_1> <control_plane_IP_2> <control_plane_IP_3>

예를 들어:

제어 평면 노드의 IP 주소가 192.168.0.2, 192.168.0.3, 192.168.0.4이면 명령은 다음과 같습니다.

bash
talosctl config endpoint 192.168.0.2 192.168.0.3 192.168.0.4
14단계: Kubernetes 클러스터 부트스트랩

제어 평면 노드가 부팅을 완료할 때까지 기다린 다음 아래 명령을 실행하여 etcd 클러스터를 부트스트랩합니다.

플레이스홀더를 세 개의 제어 평면 노드 중 하나의 IP 주소로 바꾸세요 .

bash
talosctl bootstrap --nodes <control-plane-IP>
15단계: Kubernetes 액세스 얻기

클러스터에서 kubectl을 사용하려면 kubeconfig 파일을 다운로드하세요 . 이 명령은 단일 제어 평면 노드에 대해 실행해야 합니다.

kubeconfig을(를) 관리하는 데는 두 가지 옵션이 있습니다. 를 제어 평면 노드 중 하나의 IP 주소로 바꾸세요.

  • 기본값으로 병합 kubeconfig:
bash
talosctl kubeconfig --nodes <control-plane-IP>
  • 별도의 파일을 만듭니다 kubeconfig
bash
talosctl kubeconfig alternative-kubeconfig --nodes <control-plane-IP>
  export KUBECONFIG=./alternative-kubeconfig
16단계: 노드가 실행 중인지 확인

노드가 실행 중인지 확인하려면 다음 명령을 실행하세요.

bash
kubectl get nodes

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *