← Blog
트러블슈팅

마스터 1대가 죽었는데 전체 통신이 마비

목차

CNI로 cilium을 사용하는데 설치할 때 K8S_SERVICE_HOST로 192.168.1.120를 할당해주었다.

마스터 1번 pc의 고정IP 인데 해당 노드가 죽어버리니 전체 노드가 통신이 안되는 상황이 발생했다.

  • 클러스터는 HA 구성이지만, 연결 설정은 Single Point of Failure(단일 장애점)

kube-vip 설치

  • master 중 1개에 VIP를 할당함
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: kube-vip
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: kube-vip
  template:
    metadata:
      labels:
        name: kube-vip
    spec:
      hostNetwork: true
      serviceAccountName: kube-vip # kubectl apply -f https://kube-vip.io/manifests/rbac.yaml | RBAC 적용 후 이 이름이 반드시 있어야 함
      # --- master node 선택 ---
      nodeSelector:
        node-role.kubernetes.io/control-plane: "true"
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/control-plane
        operator: Exists
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
        operator: Exists
      # ---------------------------
      containers:
      - name: kube-vip
        image: ghcr.io/kube-vip/kube-vip:v0.8.0
        args: ["manager"]
        env:
        - name: vip_arp
          value: "true"
        - name: vip_interface
          value: "enp0s18" # eth0 대신 enp0s18 사용 - altername 만 인식...
        - name: vip_address
          value: "192.168.1.200"
        - name: vip_cidr
          value: "32"
        - name: cp_enable
          value: "true"
        - name: cp_namespace
          value: "kube-system"
        - name: vip_leaderelection
          value: "true"
        - name: port
          value: "6443"
        securityContext:
          capabilities:
            add: ["NET_ADMIN", "NET_RAW"]

연결 오류가 난다면!

msg="failed to start: Get \"https://192.168.1.200:6443/api/v1/namespaces/kube-system\\": tls: failed to verify certificate: x509: certificate is valid for 10.43.0.1, 127.0.0.1, 192.168.1.120, 192.168.1.130, 192.168.1.140, ::1, not 192.168.1.200" subsys=cilium-operator-generic

  1. 파일 생성 및 편집
  1. 내용 작성 파일 안에 아래 내용을 입력하고 저장하세요.
  1. K3s 서비스 재시작

💡 왜 이렇게 하나요?

  • 인증서 갱신: K3s는 재시작될 때 /etc/rancher/k3s/config.yaml 파일이 있으면 그 내용을 읽습니다. tls-san에 추가된 IP(.200)를 인식하고, API 서버가 사용하는 SSL 인증서에 이 IP를 포함시켜 다시 구워냅니다.