본문으로 바로가기

[DevOps] cilium ipam cidr 변경하기 (feat. AWS EKS)

category IT/DevOps 2022. 8. 28. 07:30
반응형

intro

AWS EKS는 기본적으로 VPC CNI를 사용하도록 되어있습니다. 하지만 이는 VPC의 IP가 할당된다는 치명적인 단점이 있죠. 물론 우회해서 별도의 IP대역을 붙힐 수도 있겠지만 우리에게는 아주 강력한 CNI 솔루션 cilium이 있습니다. 오늘은 cilium ipam cidr 변경하는 방법에 대해 알아 보도록 하겠습니다.

IPAM 이란?

우선 IPAM은 IP Address Management의 약자로 IP를 할당하고 관리해주는 기능을 말합니다. cilium이 ip를 할당하는 방법에는 여러가지 타입이 있습니다. default 모드인 cluster-pool 모드를 보도록 하겠습니다.
https://docs.cilium.io/en/stable/concepts/networking/ipam/#address-management

cilium은 어떻게 pod ip를 할당하지?

cluster pool로 IPAM 모드를 설정하면 노드마다 pod에 IP를 할당할 수 있는 PodCIDR 대역을 각각 할당하고 각 노드의 호스트 범위 할당자를 사용하여 IP를 할당합니다. (Kubernetes 호스트 범위 모드와 유사합니다.)


그림을 보면 cilium operator 가 node에 PodCIDR대역을 할당해주고, 각 노드에 데몬셋으로 떠있는 cilium agent가 이를 받아서 pod의 ip를 할당해주게 됩니다. 여기서 키 포인트가 cilium operator죠

cilium PodCIDR 변경 하기

cilium을 helm으로 설치할때 구성했던 values.yml에서 아래와 같이 ipam 필드에 clusterPoolIPv4PodCIDR 를 변경하여 helm upgrade를 하면됩니다.
또는 kubectl edit configmap cilium-config -n kube-system 으로 clusterPoolIPv4PodCIDR 값을 해줍니다


ipam:
  # -- Configure IP Address Management mode.
  # ref: https://docs.cilium.io/en/stable/concepts/networking/ipam/
  mode: "cluster-pool"
  operator:
    # -- Deprecated in favor of ipam.operator.clusterPoolIPv4PodCIDRList.
    # IPv4 CIDR range to delegate to individual nodes for IPAM.
    clusterPoolIPv4PodCIDR: "10.0.0.0/8"
    # -- IPv4 CIDR list range to delegate to individual nodes for IPAM.
    clusterPoolIPv4PodCIDRList: []
    # -- IPv4 CIDR mask size to delegate to individual nodes for IPAM.
    clusterPoolIPv4MaskSize: 24
    # -- Deprecated in favor of ipam.operator.clusterPoolIPv6PodCIDRList.
    # IPv6 CIDR range to delegate to individual nodes for IPAM.
    clusterPoolIPv6PodCIDR: "fd00::/104"
     # -- IPv6 CIDR list range to delegate to individual nodes for IPAM.
    clusterPoolIPv6PodCIDRList: []
    # -- IPv6 CIDR mask size to delegate to individual nodes for IPAM.
    clusterPoolIPv6MaskSize: 120

여기서 끝? 이 아니라 cilium operator를 재시작해줘야 합니다. 그래야 새로 설정한 값을 operator가 가져오고 그 값으로 노드에게 podcidr을 할당할 수 있습니다.

그리고 나서 현재 떠있는 노드를 재시작해야합니다. eks cluster의 노드들은 모두 autoscaling 되어있기 때문에 node의 scale out -> scale in 작업을 해주시면 됩니다. 만약 해당 작업을 live하게 하고싶다고 하면 autoscaling group의 termination 정책을 가장오래된 것부터 삭제되도록 설정하고 node의 scale out -> scale in을 하면되겠습니다.

반응형