diff --git a/docs/ingress/kube-vip.md b/docs/ingress/kube-vip.md index 4ac3fbcfd..a01f2daaa 100644 --- a/docs/ingress/kube-vip.md +++ b/docs/ingress/kube-vip.md @@ -63,6 +63,8 @@ kube_vip_bgppeers: # kube_vip_bgp_peeraddress: # kube_vip_bgp_peerpass: # kube_vip_bgp_peeras: +# kube_vip_bgp_sourceip: +# kube_vip_bgp_sourceif: ``` If using [control plane load-balancing](https://kube-vip.io/docs/about/architecture/#control-plane-load-balancing): diff --git a/inventory/sample/group_vars/k8s_cluster/addons.yml b/inventory/sample/group_vars/k8s_cluster/addons.yml index 2fea72144..67206e1db 100644 --- a/inventory/sample/group_vars/k8s_cluster/addons.yml +++ b/inventory/sample/group_vars/k8s_cluster/addons.yml @@ -199,6 +199,8 @@ kube_vip_enabled: false # kube_vip_leasename: plndr-cp-lock # kube_vip_enable_node_labeling: false # kube_vip_lb_fwdmethod: local +# kube_vip_bgp_sourceip: +# kube_vip_bgp_sourceif: # Node Feature Discovery node_feature_discovery_enabled: false diff --git a/roles/kubernetes/node/defaults/main.yml b/roles/kubernetes/node/defaults/main.yml index 863f06523..b0f5bac37 100644 --- a/roles/kubernetes/node/defaults/main.yml +++ b/roles/kubernetes/node/defaults/main.yml @@ -86,6 +86,8 @@ kube_vip_leaseduration: 5 kube_vip_renewdeadline: 3 kube_vip_retryperiod: 1 kube_vip_enable_node_labeling: false +kube_vip_bgp_sourceip: +kube_vip_bgp_sourceif: # Requests for load balancer app loadbalancer_apiserver_memory_requests: 32M diff --git a/roles/kubernetes/node/tasks/loadbalancer/kube-vip.yml b/roles/kubernetes/node/tasks/loadbalancer/kube-vip.yml index b52261a62..942262e3d 100644 --- a/roles/kubernetes/node/tasks/loadbalancer/kube-vip.yml +++ b/roles/kubernetes/node/tasks/loadbalancer/kube-vip.yml @@ -6,6 +6,17 @@ - kube_proxy_mode == 'ipvs' and not kube_proxy_strict_arp - kube_vip_arp_enabled +- name: Kube-vip | Check mutually exclusive BGP source settings + vars: + kube_vip_bgp_sourceip_normalized: "{{ kube_vip_bgp_sourceip | default('', true) | string | trim }}" + kube_vip_bgp_sourceif_normalized: "{{ kube_vip_bgp_sourceif | default('', true) | string | trim }}" + assert: + that: + - kube_vip_bgp_sourceip_normalized == '' or kube_vip_bgp_sourceif_normalized == '' + fail_msg: "kube-vip allows only one of kube_vip_bgp_sourceip or kube_vip_bgp_sourceif." + when: + - kube_vip_bgp_enabled | default(false) + - name: Kube-vip | Check if super-admin.conf exists stat: path: "{{ kube_config_dir }}/super-admin.conf" diff --git a/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 b/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 index cda0ae82f..165e73d24 100644 --- a/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 +++ b/roles/kubernetes/node/templates/manifests/kube-vip.manifest.j2 @@ -85,6 +85,16 @@ spec: value: {{ kube_vip_bgp_peerpass | to_json }} - name: bgp_peeras value: {{ kube_vip_bgp_peeras | string | to_json }} +{% set kube_vip_bgp_sourceip_normalized = kube_vip_bgp_sourceip | default('', true) | string | trim %} +{% if kube_vip_bgp_sourceip_normalized %} + - name: bgp_sourceip + value: {{ kube_vip_bgp_sourceip_normalized | to_json }} +{% endif %} +{% set kube_vip_bgp_sourceif_normalized = kube_vip_bgp_sourceif | default('', true) | string | trim %} +{% if kube_vip_bgp_sourceif_normalized %} + - name: bgp_sourceif + value: {{ kube_vip_bgp_sourceif_normalized | to_json }} +{% endif %} {% if kube_vip_bgppeers %} - name: bgp_peers value: {{ kube_vip_bgppeers | join(',') | to_json }}