projectcalico / calico

Cloud native networking and network security
https://docs.tigera.io/calico/latest/about/
Apache License 2.0
5.89k stars 1.31k forks source link

[3.16.1 arm] calico-node needs to be restarted in order to accept new BGP peers [all node is arm] #4248

Closed mozhuli closed 3 years ago

mozhuli commented 3 years ago

Expected Behavior

calico-node no need to restart to accept new BGP peer

Current Behavior

when add a new node, existed calico-node no need to restart to accept new BGP peer

Possible Solution

existed calico-node restart will success accept new BGP peer

Steps to Reproduce (for bugs)

we use router-reflector to build calico cluster in kubernetes

# kubectl get bgppeer peer-with-route-reflectors -oyaml
apiVersion: crd.projectcalico.org/v1
kind: BGPPeer
metadata:
  annotations:
    meta.helm.sh/release-name: copaddon-calico
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2020-12-08T12:08:41Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
    release: copaddon-calico
  managedFields:
  - apiVersion: crd.projectcalico.org/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app.kubernetes.io/managed-by: {}
          f:release: {}
      f:spec:
        .: {}
        f:nodeSelector: {}
        f:peerSelector: {}
    manager: Go-http-client
    operation: Update
    time: "2020-12-08T12:08:41Z"
  name: peer-with-route-reflectors
  resourceVersion: "612"
  selfLink: /apis/crd.projectcalico.org/v1/bgppeers/peer-with-route-reflectors
  uid: 6a2d4d2a-55cf-49a0-ac72-de11b8bdf9fe
spec:
  nodeSelector: all()
  peerSelector: master=='master'

# kubectl get BGPConfiguration default -oyaml
apiVersion: crd.projectcalico.org/v1
kind: BGPConfiguration
metadata:
  annotations:
    meta.helm.sh/release-name: copaddon-calico
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2020-12-08T12:08:41Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
    release: copaddon-calico
  managedFields:
  - apiVersion: crd.projectcalico.org/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:meta.helm.sh/release-name: {}
          f:meta.helm.sh/release-namespace: {}
        f:labels:
          .: {}
          f:app.kubernetes.io/managed-by: {}
          f:release: {}
      f:spec:
        .: {}
        f:asNumber: {}
        f:logSeverityScreen: {}
        f:nodeToNodeMeshEnabled: {}
    manager: Go-http-client
    operation: Update
    time: "2020-12-08T12:08:41Z"
  name: default
  resourceVersion: "609"
  selfLink: /apis/crd.projectcalico.org/v1/bgpconfigurations/default
  uid: 25ad80c7-4692-4178-8e50-0a90bf3db53c
spec:
  asNumber: 64512
  logSeverityScreen: Info
  nodeToNodeMeshEnabled: false
# kubectl get pod -nkube-system -owide  | grep calico-node
calico-node-9qb4n                                         1/1     Running   0          33m     192.168.0.81    192.168.0.81    <none>           <none>
calico-node-bkr2q                                         0/1     Running   0          25m     192.168.0.152   192.168.0.152   <none>           <none>
calico-node-dn8bl                                         1/1     Running   0          35m     192.168.0.235   192.168.0.235   <none>           <none>
calico-node-jpz9w                                         1/1     Running   0          34m     192.168.0.35    192.168.0.35    <none>           <none>
calico-node-k68gv                                         1/1     Running   0          33m     192.168.0.2     192.168.0.2     <none>           <none>
calico-node-rs424                                         1/1     Running   0          35m     192.168.0.30    192.168.0.30    <none>           <none>

calico-node-bkr2q (192.168.0.152) is a new calico-node

and ./calicoctl-linux-arm64 get node has found 192.168.0.152 node

# DATASTORE_TYPE=kubernetes KUBECONFIG=./kubeconfig.json ./calicoctl-linux-arm64 get node
NAME
192.168.0.152
192.168.0.2
192.168.0.235
192.168.0.30
192.168.0.35
192.168.0.81

but ./calicoctl-linux-arm64 node status not found peer with 192.168.0.152

# DATASTORE_TYPE=kubernetes KUBECONFIG=./kubeconfig.json ./calicoctl-linux-arm64 node status
Calico process is running.

IPv4 BGP status
+---------------+---------------+-------+----------+-------------+
| PEER ADDRESS  |   PEER TYPE   | STATE |  SINCE   |    INFO     |
+---------------+---------------+-------+----------+-------------+
| 192.168.0.2   | node specific | up    | 15:47:38 | Established |
| 192.168.0.235 | node specific | up    | 15:47:30 | Established |
| 192.168.0.30  | node specific | up    | 15:47:29 | Established |
| 192.168.0.35  | node specific | up    | 15:47:30 | Established |
+---------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

and has found 192.168.0.152 peer info in /etc/calico/confd/config/bird.cfg

/ # cat /etc/calico/confd/config/bird.cfg
function apply_communities ()
{
}

# Generated by confd
include "bird_aggr.cfg";
include "bird_ipam.cfg";

router id 192.168.0.81;

# Configure synchronization between routing tables and kernel.
protocol kernel {
  learn;             # Learn all alien routes from the kernel
  persist;           # Don't remove routes on bird shutdown
  scan time 2;       # Scan kernel routing table every 2 seconds
  import all;
  export filter calico_kernel_programming; # Default is export none
  graceful restart;  # Turn on graceful restart to reduce potential flaps in
                     # routes when reloading BIRD configuration.  With a full
                     # automatic mesh, there is no way to prevent BGP from
                     # flapping since multiple nodes update their BGP
                     # configuration at the same time, GR is not guaranteed to
                     # work correctly in this scenario.
}

# Watch interface up/down events.
protocol device {
  debug { states };
  scan time 2;    # Scan interfaces every 2 seconds
}

protocol direct {
  debug { states };
  interface -"cali*", -"kube-ipvs*", "*"; # Exclude cali* and kube-ipvs* but
                                          # include everything else.  In
                                          # IPVS-mode, kube-proxy creates a
                                          # kube-ipvs0 interface. We exclude
                                          # kube-ipvs0 because this interface
                                          # gets an address for every in use
                                          # cluster IP. We use static routes
                                          # for when we legitimately want to
                                          # export cluster IPs.
}

# Template for all BGP clients
template bgp bgp_template {
  debug { states };
  description "Connection to BGP peer";
  local as 64512;
  multihop;
  gateway recursive; # This should be the default, but just in case.
  import all;        # Import all routes, since we don't know what the upstream
                     # topology is and therefore have to trust the ToR/RR.
  export filter calico_export_to_bgp_peers;  # Only want to export routes for workloads.
  source address 192.168.0.81;  # The local address we use for the TCP connection
  add paths on;
  graceful restart;  # See comment in kernel section about graceful restart.
  connect delay time 2;
  connect retry time 5;
  error wait time 5,30;
}

# ------------- Node-to-node mesh -------------

# Node-to-node mesh disabled

# ------------- Global peers -------------
# No global peers configured.

# ------------- Node-specific peers -------------

# For peer /host/192.168.0.81/peer_v4/192.168.0.152
protocol bgp Node_192_168_0_152 from bgp_template {
  neighbor 192.168.0.152 as 64512;
  rr client;
  rr cluster id 244.0.0.1;
}

# For peer /host/192.168.0.81/peer_v4/192.168.0.2
protocol bgp Node_192_168_0_2 from bgp_template {
  neighbor 192.168.0.2 as 64512;
}

# For peer /host/192.168.0.81/peer_v4/192.168.0.235
protocol bgp Node_192_168_0_235 from bgp_template {
  neighbor 192.168.0.235 as 64512;
  rr client;
  rr cluster id 244.0.0.1;
}

# For peer /host/192.168.0.81/peer_v4/192.168.0.30
protocol bgp Node_192_168_0_30 from bgp_template {
  neighbor 192.168.0.30 as 64512;
  rr client;
  rr cluster id 244.0.0.1;
}

# For peer /host/192.168.0.81/peer_v4/192.168.0.35
protocol bgp Node_192_168_0_35 from bgp_template {
  neighbor 192.168.0.35 as 64512;
}

# For peer /host/192.168.0.81/peer_v4/192.168.0.81
# Skipping ourselves (192.168.0.81)

the existed calico-node logs show below:

2020-12-09 15:55:56.906 [INFO][55] confd/client.go 812: Recompute BGP peerings: HostBGPConfig(node=192.168.0.152; name=ip_addr_v4) updated; HostBGPConfig(node=192.168.0.152; name=ip_addr_v6) updated; HostBGPConfig(node=192.168.0.152; name=rr_cluster_id) updated; 192.168.0.152 updated
2020-12-09 15:55:56.929 [INFO][55] confd/client.go 812: Recompute BGP peerings: 192.168.0.152 updated
2020-12-09 15:56:00.800 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates
2020-12-09 15:56:00.800 [INFO][59] felix/table.go 921: Invalidating dataplane cache ipVersion=0x4 reason="post update" table="mangle"
2020-12-09 15:56:00.802 [INFO][59] felix/table.go 592: Loading current iptables state and checking it is correct. ipVersion=0x4 table="mangle"
2020-12-09 15:56:00.803 [INFO][59] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=2.884261
2020-12-09 15:56:00.804 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates
2020-12-09 15:56:00.804 [INFO][59] felix/table.go 921: Invalidating dataplane cache ipVersion=0x4 reason="post update" table="raw"
2020-12-09 15:56:00.804 [INFO][59] felix/table.go 921: Invalidating dataplane cache ipVersion=0x4 reason="post update" table="nat"
2020-12-09 15:56:00.804 [INFO][59] felix/table.go 921: Invalidating dataplane cache ipVersion=0x4 reason="post update" table="filter"
2020-12-09 15:56:00.807 [INFO][59] felix/table.go 592: Loading current iptables state and checking it is correct. ipVersion=0x4 table="raw"
2020-12-09 15:56:00.808 [INFO][59] felix/table.go 592: Loading current iptables state and checking it is correct. ipVersion=0x4 table="nat"
2020-12-09 15:56:00.809 [INFO][59] felix/table.go 592: Loading current iptables state and checking it is correct. ipVersion=0x4 table="filter"
2020-12-09 15:56:00.825 [INFO][59] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=21.615443000000003
2020-12-09 15:56:00.894 [INFO][55] confd/client.go 812: Recompute BGP peerings: 192.168.0.152 updated
2020-12-09 15:56:02.814 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates
2020-12-09 15:56:02.814 [INFO][59] felix/ipsets.go 223: Asked to resync with the dataplane on next update. family="inet"
2020-12-09 15:56:02.814 [INFO][59] felix/ipsets.go 306: Resyncing ipsets with dataplane. family="inet"
2020-12-09 15:56:02.815 [INFO][59] felix/ipsets.go 356: Finished resync family="inet" numInconsistenciesFound=0 resyncDuration=1.256368ms
2020-12-09 15:56:02.815 [INFO][59] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=1.736788
2020-12-09 15:56:10.398 [INFO][59] felix/int_dataplane.go 1172: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"192.168.0.152" ipv4_addr:"192.168.0.152"
2020-12-09 15:56:10.399 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates
2020-12-09 15:56:10.399 [INFO][59] felix/ipip_mgr.go 222: All-hosts IP set out-of sync, refreshing it.
2020-12-09 15:56:10.399 [INFO][59] felix/ipsets.go 119: Queueing IP set for creation family="inet" setID="all-hosts-net" setType="hash:net"
2020-12-09 15:56:10.399 [INFO][59] felix/ipsets.go 749: Doing full IP set rewrite family="inet" numMembersInPendingReplace=6 setID="all-hosts-net"
2020-12-09 15:56:10.401 [INFO][55] confd/client.go 812: Recompute BGP peerings: HostBGPConfig(node=192.168.0.152; name=ip_addr_v4) updated; HostBGPConfig(node=192.168.0.152; name=network_v4) updated
2020-12-09 15:56:10.408 [INFO][55] confd/resource.go 264: Target config /etc/calico/confd/config/bird.cfg has been updated due to change in key: /calico/bgp/v1/host
2020-12-09 15:56:10.478 [INFO][59] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=79.774887
2020-12-09 15:56:13.260 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates
2020-12-09 15:56:13.261 [INFO][59] felix/ipsets.go 223: Asked to resync with the dataplane on next update. family="inet"
2020-12-09 15:56:13.261 [INFO][59] felix/ipsets.go 306: Resyncing ipsets with dataplane. family="inet"
2020-12-09 15:56:13.262 [INFO][59] felix/ipsets.go 356: Finished resync family="inet" numInconsistenciesFound=0 resyncDuration=1.244521ms
2020-12-09 15:56:13.262 [INFO][59] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=1.672076
bird: BGP: Unexpected connect from unknown address 192.168.0.152 (port 48745)
bird: BGP: Unexpected connect from unknown address 192.168.0.152 (port 45447)
bird: BGP: Unexpected connect from unknown address 192.168.0.152 (port 44391)
bird: BGP: Unexpected connect from unknown address 192.168.0.152 (port 56017)
bird: BGP: Unexpected connect from unknown address 192.168.0.152 (port 56609)
2020-12-09 15:56:24.001 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates
/ # ps -elf | grep bird
   50 root      0:00 runsv bird6
   51 root      0:00 runsv bird
  171 root      0:01 bird6 -R -s /var/run/calico/bird6.ctl -d -c /etc/calico/confd/config/bird6.cfg
  172 root      0:01 bird -R -s /var/run/calico/bird.ctl -d -c /etc/calico/confd/config/bird.cfg
20060 root      0:00 grep bird
/ #
/ #
/ # kill -9 172
/ #
/ # ps -elf | grep bird
   50 root      0:00 runsv bird6
   51 root      0:00 runsv bird
  171 root      0:01 bird6 -R -s /var/run/calico/bird6.ctl -d -c /etc/calico/confd/config/bird6.cfg
20077 root      0:00 bird -R -s /var/run/calico/bird.ctl -d -c /etc/calico/confd/config/bird.cfg
20079 root      0:00 grep bird

I exec calico-node and restart bird, I found the new peer Established

# DATASTORE_TYPE=kubernetes KUBECONFIG=./kubeconfig.json ./calicoctl-linux-arm64 node status
Calico process is running.

IPv4 BGP status
+---------------+---------------+-------+----------+-------------+
| PEER ADDRESS  |   PEER TYPE   | STATE |  SINCE   |    INFO     |
+---------------+---------------+-------+----------+-------------+
| 192.168.0.152 | node specific | up    | 17:20:51 | Established |
| 192.168.0.2   | node specific | up    | 17:20:52 | Established |
| 192.168.0.235 | node specific | up    | 17:20:50 | Established |
| 192.168.0.30  | node specific | up    | 17:20:52 | Established |
| 192.168.0.35  | node specific | up    | 17:20:52 | Established |
+---------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.
2020-12-09 17:20:50.332 [INFO][59] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=1.7050319999999999
bird: device1: Initializing
bird: direct1: Initializing
bird: Node_192_168_0_152: Initializing
bird: Node_192_168_0_2: Initializing
bird: Node_192_168_0_235: Initializing
bird: Node_192_168_0_30: Initializing
bird: Node_192_168_0_35: Initializing
bird: device1: Starting
bird: device1: Connected to table master
bird: device1: State changed to feed
bird: direct1: Starting
bird: direct1: Connected to table master
bird: direct1: State changed to feed
bird: Node_192_168_0_152: Starting
bird: Node_192_168_0_152: State changed to start
bird: Node_192_168_0_2: Starting
bird: Node_192_168_0_2: State changed to start
bird: Node_192_168_0_235: Starting
bird: Node_192_168_0_235: State changed to start
bird: Node_192_168_0_30: Starting
bird: Node_192_168_0_30: State changed to start
bird: Node_192_168_0_35: Starting
bird: Node_192_168_0_35: State changed to start
bird: Graceful restart started
bird: Started
bird: device1: State changed to up
bird: direct1: State changed to up
bird: Node_192_168_0_235: Connected to table master
bird: Node_192_168_0_235: State changed to wait
bird: Node_192_168_0_152: Connected to table master
bird: Node_192_168_0_152: State changed to wait
bird: Node_192_168_0_2: Connected to table master
bird: Node_192_168_0_2: State changed to wait
bird: Node_192_168_0_35: Connected to table master
bird: Node_192_168_0_35: State changed to wait
bird: Node_192_168_0_30: Connected to table master
bird: Node_192_168_0_30: State changed to wait
bird: Graceful restart done
bird: Node_192_168_0_152: State changed to feed
bird: Node_192_168_0_2: State changed to feed
bird: Node_192_168_0_235: State changed to feed
bird: Node_192_168_0_30: State changed to feed
bird: Node_192_168_0_35: State changed to feed
bird: Node_192_168_0_152: State changed to up
bird: Node_192_168_0_2: State changed to up
bird: Node_192_168_0_235: State changed to up
bird: Node_192_168_0_30: State changed to up
bird: Node_192_168_0_35: State changed to up
2020-12-09 17:21:00.906 [INFO][59] felix/int_dataplane.go 1300: Applying dataplane updates

the x86 new node

2020-12-08 07:51:14.722 [INFO][1132] felix/int_dataplane.go 1172: Received *proto.RouteUpdate update from calculation graph msg=type:REMOTE_HOST dst:"192.168.0.14/32" dst_node_name:"192.168.0.14" dst_node_ip:"192.168.0.14"
2020-12-08 07:51:14.722 [INFO][1132] felix/int_dataplane.go 1172: Received *proto.HostMetadataUpdate update from calculation graph msg=hostname:"192.168.0.14" ipv4_addr:"192.168.0.14"
2020-12-08 07:51:14.722 [INFO][1132] felix/int_dataplane.go 1300: Applying dataplane updates
2020-12-08 07:51:14.722 [INFO][1132] felix/bpf_route_mgr.go 147: Completed updates to BPF routes. numAdds=0x1 numDels=0x0 timeTaken=26.5µs
2020-12-08 07:51:14.723 [INFO][1132] felix/int_dataplane.go 1314: Finished applying updates to dataplane. msecToApply=0.19716899999999998
bird: Reconfiguration requested by SIGHUP
bird: Reconfiguring
bird: device1: Reconfigured
bird: direct1: Reconfigured
bird: Node_192_168_0_157: Reconfigured
bird: Node_192_168_0_48: Reconfigured
bird: Adding protocol Node_192_168_0_14
bird: Node_192_168_0_14: Initializing
bird: Node_192_168_0_14: Starting
bird: Node_192_168_0_14: State changed to start
bird: Reconfigured
2020-12-08 07:51:14.728 [INFO][583] confd/resource.go 264: Target config /etc/calico/confd/config/bird.cfg has been updated due to change in key: /calico/bgp/v1/host
2020-12-08 07:51:14.823 [INFO][1132] felix/int_dataplane.go 1172: Received *proto.RouteUpdate update from calculation graph msg=type:REMOTE_WORKLOAD ip_pool_type:VXLAN dst:"172.16.135.0/26" dst_node_name:"192.168.0.14" dst_node_ip:"192.168.0.14" nat_outgoing:true

Context

Your Environment

mozhuli commented 3 years ago

similar to #1420 @caseydavenport

mozhuli commented 3 years ago

also remove calico-node(192.168.0.170), the bgp peer info in node(192.168.0.229)has removed in /etc/calico/confd/config/bird.cfg, but not clean in node status

/ # cat /etc/calico/confd/config/bird.cfg
function apply_communities ()
{
}

# Generated by confd
include "bird_aggr.cfg";
include "bird_ipam.cfg";

router id 192.168.0.229;

# Configure synchronization between routing tables and kernel.
protocol kernel {
  learn;             # Learn all alien routes from the kernel
  persist;           # Don't remove routes on bird shutdown
  scan time 2;       # Scan kernel routing table every 2 seconds
  import all;
  export filter calico_kernel_programming; # Default is export none
  graceful restart;  # Turn on graceful restart to reduce potential flaps in
                     # routes when reloading BIRD configuration.  With a full
                     # automatic mesh, there is no way to prevent BGP from
                     # flapping since multiple nodes update their BGP
                     # configuration at the same time, GR is not guaranteed to
                     # work correctly in this scenario.
}

# Watch interface up/down events.
protocol device {
  debug all;
  scan time 2;    # Scan interfaces every 2 seconds
}

protocol direct {
  debug all;
  interface -"cali*", -"kube-ipvs*", "*"; # Exclude cali* and kube-ipvs* but
                                          # include everything else.  In
                                          # IPVS-mode, kube-proxy creates a
                                          # kube-ipvs0 interface. We exclude
                                          # kube-ipvs0 because this interface
                                          # gets an address for every in use
                                          # cluster IP. We use static routes
                                          # for when we legitimately want to
                                          # export cluster IPs.
}

# Template for all BGP clients
template bgp bgp_template {
  debug all;
  description "Connection to BGP peer";
  local as 64512;
  multihop;
  gateway recursive; # This should be the default, but just in case.
  import all;        # Import all routes, since we don't know what the upstream
                     # topology is and therefore have to trust the ToR/RR.
  export filter calico_export_to_bgp_peers;  # Only want to export routes for workloads.
  source address 192.168.0.229;  # The local address we use for the TCP connection
  add paths on;
  graceful restart;  # See comment in kernel section about graceful restart.
  connect delay time 2;
  connect retry time 5;
  error wait time 5,30;
}

# ------------- Node-to-node mesh -------------

# Node-to-node mesh disabled

# ------------- Global peers -------------
# No global peers configured.

# ------------- Node-specific peers -------------

# For peer /host/192.168.0.229/peer_v4/192.168.0.216
protocol bgp Node_192_168_0_216 from bgp_template {
  neighbor 192.168.0.216 as 64512;
}

# For peer /host/192.168.0.229/peer_v4/192.168.0.229
# Skipping ourselves (192.168.0.229)

# For peer /host/192.168.0.229/peer_v4/192.168.0.233
protocol bgp Node_192_168_0_233 from bgp_template {
  neighbor 192.168.0.233 as 64512;
}

/ #
/ # exit

# DATASTORE_TYPE=kubernetes KUBECONFIG=./kubeconfig.json ./calicoctl-linux-arm64 node status
Calico process is running.

IPv4 BGP status
+---------------+---------------+-------+----------+--------------------------------+
| PEER ADDRESS  |   PEER TYPE   | STATE |  SINCE   |              INFO              |
+---------------+---------------+-------+----------+--------------------------------+
| 192.168.0.170 | node specific | start | 21:42:38 | Active Socket: Connection      |
|               |               |       |          | refused                        |
| 192.168.0.216 | node specific | up    | 21:28:27 | Established                    |
| 192.168.0.233 | node specific | up    | 21:39:53 | Established                    |
+---------------+---------------+-------+----------+--------------------------------+

IPv6 BGP status
No IPv6 peers found.

When i restart calico-node(192.168.0.229), the node status perform normal

# DATASTORE_TYPE=kubernetes KUBECONFIG=./kubeconfig.json ./calicoctl-linux-arm64 node status
Calico process is running.

IPv4 BGP status
+---------------+---------------+-------+----------+-------------+
| PEER ADDRESS  |   PEER TYPE   | STATE |  SINCE   |    INFO     |
+---------------+---------------+-------+----------+-------------+
| 192.168.0.216 | node specific | up    | 21:51:23 | Established |
| 192.168.0.233 | node specific | up    | 21:51:23 | Established |
+---------------+---------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.
mozhuli commented 3 years ago

the bird confd

/ # cat /etc/calico/confd/conf.d/bird.toml
[template]
src = "bird.cfg.template"
dest = "/etc/calico/confd/config/bird.cfg"
prefix = "/calico/bgp/v1"
keys = [
    "/host",
    "/global",
]
check_cmd = "bird -p -c {{.src}}"
reload_cmd = "sv hup bird || true"

but I run the command sv hup bird || true, failed

fail: bird: unable to change to service directory: file does not exist

I use command kill -1 $bird-pid , the bird received SIGHUP signal success

mozhuli commented 3 years ago

https://github.com/projectcalico/node/pull/652 has fixed it