이것이 점프 투 공작소

EKS node-subnet, pod-subnet 분리하는법 본문

k8s

EKS node-subnet, pod-subnet 분리하는법

겅겅겅 2023. 9. 3. 16:16

Node와 Pod의 네트워크를 분리해야하는 이유

두 네트워크를 분리함으로서 보안 및 정책을 엄격하게 관리 할 수 있고 네트워크별 고유한 정책을 적용할 수 있습니다.

예를들어, 특정 노드에서 실행중인 pod가 다른 node의 pod에 직접 통신 할 수 없도록 설정가능합니다.

IP관리 또한 용의하며, 새로운 노드가 추가되면 해당 노드에 대한 네트워크 구성을 자동으로 처리 할 수 있습니다.

Amazon VPC CNI의 사용자 지정 네트워킹 기능을 사용하면 포드에서 사용할 Amazon VPC 클러스터의 특정 서브넷을 정의할 수 있습니다. 

 

VPC 구성

vpc에 cidr을 추가하여 10.0.x.x/16은 노드 네트워크, 100.64.x.x/16은 파드 네트워크로 구성하려합니다.

기존의 EC2 노드가 있는 서브넷 (k8s-subnet-public1-ap-northeast-2a, k8s-subnet-public2-ap-northeast-2b) 

POD가 실행되고자 하는 서브넷 (public-subnet-eks-prod-a, public-subnet-eks-prod-b)으로 서브넷을 만들었습니다.

현재 EKS의 노드그룹의 EC2는 실행되고있는 상태입니다.

 

AWS, K8S 네트워크 설정 추가

1. CNI Custom Network 설정

EKS aws-node에 대한 환경변수값을 설정합니다.

 kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
 kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=failure-domain.beta.kubernetes.io/zone

ENIConfig생성

ENIConfig 객체는 하나의 서브넷과 보안 그룹 목록을 정의합니다. 노드에 단 하나의 ENIConfig 객체만 사용하여 주석을 달거나 레이블을 지정하면 해당 노드에 예약된 모든 포드는 해당 ENIConfig 객체에 정의된 서브넷과 보안 그룹을 사용합니다.

 

1. CRD 생성

ENIConfig CRD를 생성합니다.

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: eniconfigs.crd.k8s.amazonaws.com
spec:
  scope: Cluster
  group: crd.k8s.amazonaws.com
  version: v1alpha1
  names:
    plural: eniconfigs
    singular: eniconfig
    kind: ENIConfig

pod가 생성될 서브넷과 SG를 정의한 ENIConfig.yml입니다.

---
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: ap-northeast-2a
spec:
  securityGroups: 
    - <SG>
  subnet: <파드 네트워크 서브넷>
---
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: ap-northeast-2b
spec:
  securityGroups: 
    - <SG>
  subnet: <파드 네트워크 서브넷>

 

노드 설정에 추가한 상태정보 확인

 kubectl get ds aws-node -o yaml -n kube-system

설정한 환경 변수들 확인 가능

 

Pod IP를 분리하기 위해 노드 추가 

설정 후 pod를 조회해보면 기존 대역에 그대로 있습니다.

아직 기존의 노드들이 기존대역에 있기에 그렇습니다, 새로운 노드를 추가 및 실행하여야 네트워크가 분리됩니다.

노드 생성 전 pod-ip

eks노드 그룹 조정

조정되는 node들 확인

기존 네트워크 내에 노드 삭제

eks 콘솔에서 노드 그룺 수를 조정합니다.

자동으로 가장 오래된 노드가 삭제됩니다.

노드와 분리된 Pod IP 확인

 

 

참고 : https://repost.aws/ko/knowledge-center/eks-custom-subnet-for-pod