Ubuntu 18.04 netplan은 문제를 해결하기 위해 인터럽트 네트워크 다시 시작을 적용합니다.

Ubuntu 18.04 netplan은 문제를 해결하기 위해 인터럽트 네트워크 다시 시작을 적용합니다.

설정은 다음과 같습니다:

host1-ip iface: ens192: 10.100.0.11/16
host1-gateway:  ens192: 10.100.0.1
host1-ip iface: ens224: 10.0.0.11/16
host1-gateway:  ens224: 10.0.0.1

host2-ip iface: ens192: 10.100.0.12/16
host2-gateway:  ens192: 10.100.0.1
host2-ip iface: ens224: 10.0.0.12/16
host2-gateway:  ens224: 10.0.0.1

keepalived-vip1 on iface: ens192: 10.100.100.1
keepalived-vip2 on iface: ens224: 10.0.100.1

dns1: 10.100.0.21
dns2: 10.100.0.22

/etc/netplan/01-netcfg.yaml:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ens192:
      addresses: [ 10.100.0.11/16 ]
      gateway4: 10.100.0.1
      nameservers:
          search: [ example.com ]
          addresses:
              - "10.100.0.21"
              - "10.100.0.22"
    ens224:
      addresses: [ 10.0.0.11/16 ]
      nameservers:
          search: [ example.com ]
          addresses:
              - "10.100.0.21"
              - "10.100.0.22"

이 구성으로

keepalived-vip1 on iface: ens192: 10.100.100.1 <-- works
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- dead, not pingable

논리적으로 ens224 인터페이스에 설정된 게이트웨이가 없으므로 네트워크 스케줄러가 와서 다음 스크립트를 사용하여 iface ens224에 대한 게이트웨이 및 연결 유지 주소를 설정합니다.

/usr/lib/networkd-dispatcher/routable.d/00up:

#!/bin/bash
## INITIALISIERUNG
#Diese Werte werden vom netword-dispatcher an das Skript übergeben
set -x
INTERFACE=${IFACE}
ACTION=${STATE}
case "${INTERFACE}" in
("ens224")
        case "${ACTION}" in
        ("routable")
                /bin/ip route add table 2 default via 10.0.0.1
                /bin/ip rule add from 10.0.100.1 table 2
                ;;
        (*)
                ;;
        esac

(*)
        ;;
esac

서버를 다시 시작하면 모든 것이 예상대로 작동합니다. 내 두 주소를 사용하고 다시 시작해도 여전히 작동합니다.

keepalived-vip1 on iface: ens192: 10.100.100.1 <-- works
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- works

이제 몇 가지 명령을 실행합니다.

netplan apply
systemctl restart systemd-networkd

이제 주소가 사라졌습니다(Keepalived 상태 확인은 여전히 ​​성공하므로 장애 조치가 발생하지 않지만 이 경우에는 이 netplan // 네트워크 // 다시 시작 동작을 디버그해야 함).

keepalived-vip1 on iface: ens192: 10.100.100.1 <-- dead, not pingable
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- dead, not pingable

스크립트의 수동 단계를 사용하여 문제를 해결해 보세요.

ip route add table 2 default via 10.0.0.1
ip rule add from 10.0.100.1 table 2

아직:

keepalived-vip1 on iface: ens192: 10.100.100.1 <-- dead, not pingable
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- dead, not pingable

서버를 다시 시작하면 정상으로 돌아옵니다.

keepalived-vip1 on iface: ens192: 10.100.100.1 <-- works
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- works

나는 또한 netplan을 사용해 보았지만 이미Netplan에는 각각 다른 게이트웨이에 연결된 2개의 NIC가 있습니다.하지만 두 번째 keepalived-vip를 작동시킬 수 없습니다.

답변1

내 자신의 질문에 대답하려고 많은 조사 끝에 나는 keepalived 질문을 발견했습니다.https://github.com/acassen/keepalived/issues/836

"systemd-networkd가 자신에 '속하지 않는' 주소를 제거하고 있습니다." keepalived는 ubuntu 또는 rhel의 릴리스에서 이를 감지할 수 없습니다.

나에게 있어서 해결책은 이 상황을 처리할 수 있는 버전 2.0.20으로 연결 유지 컨테이너를 구축하는 것이었습니다.

(keepalived >= v2가 처리할 수 있음)

답변2

또 다른 옵션은 인터페이스에 "중요" 플래그를 추가하는 것입니다.

network:
  version: 2
  renderer: networkd
  ethernets:
    ens192:
      addresses: [ 10.100.0.11/16 ]
      gateway4: 10.100.0.1
      nameservers:
          search: [ example.com ]
          addresses:
              - "10.100.0.21"
              - "10.100.0.22"
      critical: true
    ens224:
      addresses: [ 10.0.0.11/16 ]
      nameservers:
          search: [ example.com ]
          addresses:
              - "10.100.0.21"
              - "10.100.0.22"
      critical: true

관련 정보