kubeadm의 이중 스택 지원

kubeadm의 이중 스택 지원 (Dual-stack support with kubeadm)

쿠버네티스 클러스터에는 이중 스택 네트워킹이 포함돼 있어요. 이는 클러스터 네트워킹이 두 주소 패밀리를 모두 사용하게 해준다는 뜻이에요. 클러스터에서 제어 플레인은 단일 Pod 또는 Service에 IPv4 주소와 IPv6 주소를 모두 할당할 수 있어요.

출처: 문서

본문

시작하기 전에 (Before you begin)

Installing kubeadm의 단계에 따라 kubeadm 도구를 설치했어야 해요.

nodes로 사용하려는 각 서버에 IPv6 포워딩을 허용했는지 확인해요.

IPv6 패킷 포워딩 활성화하기

IPv6 패킷 포워딩이 활성화됐는지 확인하려면:

sysctl net.ipv6.conf.all.forwarding

출력이 net.ipv6.conf.all.forwarding = 1 이면 이미 활성화된 것이에요. 그렇지 않으면 아직 활성화되지 않은 것이에요.

수동으로 IPv6 패킷 포워딩을 활성화하려면:

# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.ipv6.conf.all.forwarding = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system

사용할 IPv4와 IPv6 주소 범위가 있어야 해요. 클러스터 운영자는 보통 IPv4에 사설 주소 범위를 사용해요. IPv6의 경우 클러스터 운영자는 보통 2000::/3 안에서 자신에게 할당된 범위를 사용해 글로벌 유니캐스트 주소 블록을 선택해요. 클러스터의 IP 주소 범위를 공개 인터넷에 라우팅할 필요는 없어요.

IP 주소 할당 크기는 실행할 계획인 Pod와 Service의 수에 적합해야 해요.

참고:

이중 스택 클러스터 만들기

kubeadm init 으로 이중 스택 클러스터를 만들려면 다음 예시와 비슷한 명령줄 인자를 전달할 수 있어요:

# These address ranges are examples
kubeadm init --pod-network-cidr=10.244.0.0/16,2001:db8:42:0::/56 --service-cidr=10.96.0.0/16,2001:db8:42:1::/112

더 명확하게, 다음은 기본 이중 스택 제어 플레인 노드용 kubeadm 구성 파일 kubeadm-config.yaml 예시예요.

---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16,2001:db8:42:0::/56
  serviceSubnet: 10.96.0.0/16,2001:db8:42:1::/112
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: "10.100.0.1"
  bindPort: 6443
nodeRegistration:
  kubeletExtraArgs:
  - name: "node-ip"
    value: "10.100.0.2,fd00:1:2:3::2"

InitConfiguration의 advertiseAddress 는 API 서버가 수신 중인 것을 광고할 IP 주소를 지정해요. advertiseAddress 값은 kubeadm init--apiserver-advertise-address 플래그와 같아요.

이중 스택 제어 플레인 노드를 시작하려면 kubeadm을 실행해요:

kubeadm init --config=kubeadm-config.yaml

kube-controller-manager 플래그 --node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6 는 기본값으로 설정돼 있어요. IPv4/IPv6 듀얼 스택 구성 참고.

참고:

노드를 이중 스택 클러스터에 조인하기

노드를 조인하기 전에 노드가 IPv6 라우팅 가능한 네트워크 인터페이스를 가지고 있고 IPv6 포워딩을 허용하는지 확인해요.

다음은 워커 노드를 클러스터에 조인하기 위한 kubeadm 구성 파일 kubeadm-config.yaml 예시예요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
discovery:
  bootstrapToken:
    apiServerEndpoint: 10.100.0.1:6443
    token: "clvldh.vjjwg16ucnhp94qr"
    caCertHashes:
    - "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
    # change auth info above to match the actual token and CA certificate hash for your cluster
nodeRegistration:
  kubeletExtraArgs:
  - name: "node-ip"
    value: "10.100.0.2,fd00:1:2:3::3"

또한 다음은 다른 제어 플레인 노드를 클러스터에 조인하기 위한 kubeadm 구성 파일 kubeadm-config.yaml 예시예요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: JoinConfiguration
controlPlane:
  localAPIEndpoint:
    advertiseAddress: "10.100.0.2"
    bindPort: 6443
discovery:
  bootstrapToken:
    apiServerEndpoint: 10.100.0.1:6443
    token: "clvldh.vjjwg16ucnhp94qr"
    caCertHashes:
    - "sha256:a4863cde706cfc580a439f842cc65d5ef112b7b2be31628513a9881cf0d9fe0e"
    # change auth info above to match the actual token and CA certificate hash for your cluster
nodeRegistration:
  kubeletExtraArgs:
  - name: "node-ip"
    value: "10.100.0.2,fd00:1:2:3::4"

JoinConfiguration.controlPlane의 advertiseAddress 는 API 서버가 수신 중인 것을 광고할 IP 주소를 지정해요. advertiseAddress 값은 kubeadm join--apiserver-advertise-address 플래그와 같아요.

kubeadm join --config=kubeadm-config.yaml

단일 스택 클러스터 만들기

참고:

더 명확하게, 다음은 단일 스택 제어 플레인 노드용 kubeadm 구성 파일 kubeadm-config.yaml 예시예요.

apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
networking:
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/16

더 알아보기 (Learn more)