July 26, 2025

[Home-K8S] #11 Talos - Cilium CNI 설치

[Home-K8S] #11  Talos - Cilium CNI 설치
Deploying Cilium CNI
In this guide you will learn how to set up Cilium CNI on Talos.

Talos Linux는 기본적으로 flannel 을 사용하므로, 기본 cni를 사용하지 않는 다는 것을 명시해 주어야 합니다.

controlplane.yaml 에서 cni: none 을 설정해 줍니다.

cluster:
  network:
    cni:
      name: none

Cilium 설치

cilium 을 다음 옵션으로 구성하면 됩니다.

cilium install \
    --set ipam.mode=kubernetes \
    --set kubeProxyReplacement=false \
    --set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
    --set securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
    --set cgroup.autoMount.enabled=false \
    --set cgroup.hostRoot=/sys/fs/cgroup

Without Kube-Proxy

cilium 을 구성하는 이유는 kube-proxy 를 대신하기 위해서 구성하는 경우가 많습니다. 그 때에는 talos 옵션에서 proxy 옵션을 꺼주고 해야합니다.

cluster:
  proxy:
    disabled: true
cilium install \
    --set ipam.mode=kubernetes \
    --set kubeProxyReplacement=true \
    --set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
    --set securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
    --set cgroup.autoMount.enabled=false \
    --set cgroup.hostRoot=/sys/fs/cgroup \
    --set k8sServiceHost=localhost \
    --set k8sServicePort=7445

API Gateway, L2, loadbalancer

공식 Docs 에 나온 설정으로 API Gateway도 설정할 수 있습니다.
저는 nginx-ingress의 auth-url 을 사용하고 있기에 API Gateway 는 사용하지 않고 LoadBalancer 만 사용합니다.

기존에는 metal LB 를 사용하고 있던 것을 l2announcements 로 교체했습니다.

cilium install \
    --set ipam.mode=kubernetes \
    --set kubeProxyReplacement=true \
    --set securityContext.capabilities.ciliumAgent="{CHOWN,KILL,NET_ADMIN,NET_RAW,IPC_LOCK,SYS_ADMIN,SYS_RESOURCE,DAC_OVERRIDE,FOWNER,SETGID,SETUID}" \
    --set securityContext.capabilities.cleanCiliumState="{NET_ADMIN,SYS_ADMIN,SYS_RESOURCE}" \
    --set cgroup.autoMount.enabled=false \
    --set cgroup.hostRoot=/sys/fs/cgroup \
    --set k8sServiceHost=localhost \
    --set k8sServicePort=7445 \
	--set l2announcements.enabled=true \
    --set externalIPs.enabled=false\
    --set nodePort.enabled=false \
	--set ipam.operator.clusterPoolIPv4PodCIDRList="{10.244.0.0/16}" \
    --set ipam.operator.clusterPoolIPv4MaskSize=24
    

LB 사용

climum 의 loadBalancerPool 로 사용할 IP 들을 설정하고, 그 값들을 ARP 가능하게 announce 합니다.

apiVersion: cilium.io/v2alpha1
kind: CiliumLoadBalancerIPPool
metadata: 
  name: default-pool
spec:
  blocks:
  - cidr: "192.168.0.240/28"
---
apiVersion: cilium.io/v2alpha1
kind: CiliumL2AnnouncementPolicy
metadata:
  name: announce-nfs
  namespace: kube-system
spec:
  loadBalancerIPs: true 
  interfaces:
  - enp2s0

Comments