Skip to content

Commit 949b1d1

Browse files
ricolintvanfleetmnaser
authored
[ATMOSPHERE-461]Kube vip bgp + CI (#147)
* Feat: Add BGP as an option for the Kube_VIP (#3) * Feat: Add BGP as an option for the Kube_VIP * AB#9103388 * fix template name * fix template name * Kubevipbgp (#4) * Feat: Add BGP as an option for the Kube_VIP * AB#9103388 * fix template name * fix template name * removed whitespace * VexxHost suggestions (#6) * Feat: Add BGP as an option for the Kube_VIP * AB#9103388 * fix template name * fix template name * removed whitespace * made changes per VexxHost Feedback * removed template * fixed variables * template fix (#8) * Kubevip (#9) * template fix * space :| * Kubevipbgp (#10) * Feat: Add BGP as an option for the Kube_VIP * AB#9103388 * fix template name * fix template name * removed whitespace * made changes per VexxHost Feedback * removed template * fixed variables * fixed template * Update main.yml * Update main.yml whitespace * Update main.yml * correct vip configs * Add BPG molecule * improve bgp in kube_vip template * Add tox env molecule-bgp * fix package and add zuul * use correct address for bgp * fix kube-vip.yaml.j2 format * add bgp_sourceip * add molecule bgp verify * add SPDX and change molecule vars * Update prepare.yml * Update converge.yml * Update verify.yml * Reorder based on docs --------- Co-authored-by: tvanfleet <[email protected]> Co-authored-by: Mohammed Naser <[email protected]>
1 parent 1b19d9c commit 949b1d1

File tree

9 files changed

+273
-22
lines changed

9 files changed

+273
-22
lines changed

molecule/bgp/converge.yml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../kubernetes/converge.yml

molecule/bgp/molecule.yml

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright (c) 2024 VEXXHOST, Inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
dependency:
5+
name: galaxy
6+
driver:
7+
name: default
8+
options:
9+
managed: False
10+
ansible_connection_options:
11+
ansible_become: "true"
12+
ansible_connection: local
13+
platforms:
14+
- name: instance
15+
groups:
16+
- controllers
17+
provisioner:
18+
name: ansible
19+
config_options:
20+
connection:
21+
pipelining: true
22+
inventory:
23+
group_vars:
24+
all:
25+
kubernetes_version: ${KUBERNETES_VERSION-1.28.13}
26+
cilium_helm_values:
27+
operator:
28+
replicas: 1
29+
controllers:
30+
kube_vip_interface: "{{ ansible_facts['default_ipv4'].interface }}"
31+
kube_vip_address: 172.17.0.100
32+
kubernetes_hostname: "{{ ansible_facts['default_ipv4'].address }}"
33+
# use bgp for kube-vip
34+
kube_vip_mode: bgp
35+
kube_vip_bgp_routerid: 172.17.0.100
36+
kube_vip_bgp_peeraddress: "{{ ansible_facts['default_ipv4'].address }}"
37+
kube_vip_bgp_sourceip: 172.17.0.100
38+
kube_vip_bgp_multihop: true
39+
verifier:
40+
name: ansible

molecule/bgp/prepare.yml

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Copyright (c) 2024 VEXXHOST, Inc.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
4+
# not use this file except in compliance with the License. You may obtain
5+
# a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12+
# License for the specific language governing permissions and limitations
13+
# under the License.
14+
15+
- ansible.builtin.import_playbook: ../kubernetes/prepare.yml
16+
17+
- name: Prepare BGP
18+
hosts: all
19+
become: true
20+
tasks:
21+
- ansible.posix.sysctl:
22+
name: net.ipv4.ip_forward
23+
value: '1'
24+
sysctl_set: true
25+
state: present
26+
reload: true
27+
28+
- name: Add FRR Apt signing key
29+
ansible.builtin.apt_key:
30+
url: https://deb.frrouting.org/frr/keys.asc
31+
state: present
32+
when: ansible_facts['os_family'] in ['Debian']
33+
34+
- name: Add FRR repository
35+
ansible.builtin.apt_repository:
36+
repo: "deb https://deb.frrouting.org/frr jammy frr-stable"
37+
state: present
38+
when: ansible_facts['os_family'] in ['Debian']
39+
40+
- name: Install frr packages
41+
ansible.builtin.package:
42+
name:
43+
- frr
44+
- frr-pythontools
45+
update_cache: true
46+
47+
- name: Ensure bgpd is enabled
48+
ansible.builtin.lineinfile:
49+
path: /etc/frr/daemons
50+
regexp: '^bgpd=no'
51+
line: bgpd=yes
52+
53+
- name: Update FRR configuration
54+
ansible.builtin.template:
55+
src: frr.conf.j2
56+
dest: /etc/frr/frr.conf
57+
owner: root
58+
group: root
59+
mode: "0644"
60+
61+
- name: Restart service frr
62+
ansible.builtin.service:
63+
name: frr
64+
state: restarted

molecule/bgp/templates/frr.conf.j2

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# {{ ansible_managed }}
2+
3+
frr defaults traditional
4+
log syslog informational
5+
debug bgp events
6+
debug bgp filters
7+
debug bgp fsm
8+
debug bgp keepalives
9+
debug bgp updates
10+
router bgp 65000
11+
bgp router-id {{ ansible_facts['default_ipv4'].address }}
12+
bgp log-neighbor-changes
13+
neighbor 172.17.0.100 remote-as 65000
14+
neighbor 172.17.0.100 soft-reconfiguration inbound

molecule/bgp/verify.yml

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Copyright (c) 2024 VEXXHOST, Inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
- ansible.builtin.import_playbook: ../kubernetes/verify.yml
5+
6+
- name: verify BGP
7+
hosts: all
8+
become: true
9+
tasks:
10+
- name: Get all nodes
11+
ansible.builtin.command: |
12+
vtysh -c 'show ip bgp neighbors 172.17.0.100 received-routes'
13+
register: received
14+
retries: 60
15+
delay: 2
16+
until:
17+
- received.rc == 0
18+
- received.stdout.find('172.17.0.100/32') != -1
19+
20+
- name: Print bgp neighbors received-routes
21+
ansible.builtin.debug:
22+
msg: "{{ received.stdout_lines }}"

roles/kube_vip/defaults/main.yml

+26
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,29 @@ kube_vip_interface: "{{ keepalived_interface | default(kubernetes_keepalived_int
2323

2424
# IP address to use for kube-vip
2525
kube_vip_address: "{{ keepalived_vip | default(kubernetes_keepalived_vip) }}"
26+
27+
# VIP mode for kube-vip (valide options: arp or bgp)
28+
kube_vip_mode: arp
29+
30+
# BGP peers, if BGP is enabled
31+
# kube_vip_bgp_peers: 192.168.0.10:65000::false,192.168.0.11:65000::false
32+
33+
# BGP peer as, if BGP is enabled
34+
# kube_vip_bgp_peeras: "65000"
35+
36+
# AS of a single BGP Peer, if BGP is enabled
37+
# kube_vip_bgp_as: "65000"
38+
39+
# BGP router id, if BGP is enabled
40+
# kube_vip_bgp_routerid: 192.168.0.2
41+
#
42+
# kube_vip_bgp_routerinterface: ens3
43+
44+
# Address of a single BGP Peer, if BGP is enabled
45+
# kube_vip_bgp_peeraddress:
46+
47+
# password to work with a single BGP Peer, if BGP is enabled
48+
# kube_vip_bgp_peerpass:
49+
50+
# Determines which IP address BGP should peer from
51+
# kube_vip_bgp_sourceip: 192.168.0.2

roles/kube_vip/templates/kube-vip.yaml.j2

+41-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ spec:
99
- args:
1010
- manager
1111
env:
12-
- name: vip_arp
13-
value: "true"
1412
- name: port
1513
value: "6443"
1614
- name: vip_interface
@@ -23,6 +21,9 @@ spec:
2321
value: kube-system
2422
- name: vip_ddns
2523
value: "false"
24+
{% if kube_vip_mode == "arp" %}
25+
- name: vip_arp
26+
value: "true"
2627
- name: svc_enable
2728
value: "true"
2829
- name: svc_leasename
@@ -37,6 +38,44 @@ spec:
3738
value: "10"
3839
- name: vip_retryperiod
3940
value: "2"
41+
{% elif kube_vip_mode == "bgp" %}
42+
- name: vip_arp
43+
value: "false"
44+
- name: bgp_enable
45+
value: "true"
46+
{% if kube_vip_bgp_routerid is defined %}
47+
- name: bgp_routerid
48+
value: "{{ kube_vip_bgp_routerid }}"
49+
{% endif %}
50+
{% if kube_vip_bgp_routerinterface is defined %}
51+
- name: bgp_routerinterface
52+
value: "{{ kube_vip_bgp_routerinterface }}"
53+
{% endif %}
54+
{% if kube_vip_bgp_as is defined %}
55+
- name: bgp_as
56+
value: "{{ kube_vip_bgp_as }}"
57+
{% endif %}
58+
{% if kube_vip_bgp_peers is defined %}
59+
- name: bgp_peers
60+
value: "{{ kube_vip_bgp_peers }}"
61+
{% endif %}
62+
{% if kube_vip_bgp_peeraddress is defined %}
63+
- name: bgp_peeraddress
64+
value: "{{ kube_vip_bgp_peeraddress }}"
65+
{% endif %}
66+
{% if kube_vip_bgp_peeras is defined %}
67+
- name: bgp_peeras
68+
value: "{{ kube_vip_bgp_peeras }}"
69+
{% endif %}
70+
{% if kube_vip_bgp_peerpass is defined %}
71+
- name: bgp_peerpass
72+
value: "{{ kube_vip_bgp_peerpass }}"
73+
{% endif %}
74+
{% if kube_vip_bgp_sourceip is defined %}
75+
- name: bgp_sourceip
76+
value: "{{ kube_vip_bgp_sourceip }}"
77+
{% endif %}
78+
{% endif %}
4079
- name: address
4180
value: "{{ kube_vip_address }}"
4281
- name: prometheus_server

tox.ini

+8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ passenv =
2424
commands =
2525
molecule test -s aio
2626

27+
[testenv:molecule-bgp]
28+
deps =
29+
{[testenv:molecule-venv]deps}
30+
passenv =
31+
KUBERNETES_VERSION
32+
commands =
33+
molecule test -s bgp
34+
2735
[testenv:molecule-cluster-api]
2836
deps =
2937
{[testenv:molecule-venv]deps}

zuul.d/jobs-jammy.yaml

+57-20
Original file line numberDiff line numberDiff line change
@@ -12,40 +12,71 @@
1212
- job:
1313
name: ansible-collection-kubernetes-molecule-jammy-aio
1414
parent: ansible-collection-kubernetes-molecule-jammy
15+
16+
- job:
17+
name: ansible-collection-kubernetes-molecule-jammy-aio-arp
18+
parent: ansible-collection-kubernetes-molecule-jammy
1519
vars:
1620
tox_envlist: molecule-aio
1721

1822
- job:
19-
name: ansible-collection-kubernetes-molecule-jammy-aio-1-26
20-
parent: ansible-collection-kubernetes-molecule-jammy-aio
23+
name: ansible-collection-kubernetes-molecule-jammy-aio-bgp
24+
parent: ansible-collection-kubernetes-molecule-jammy
25+
vars:
26+
tox_envlist: molecule-bgp
27+
28+
- job:
29+
name: ansible-collection-kubernetes-molecule-jammy-aio-arp-1-26
30+
parent: ansible-collection-kubernetes-molecule-jammy-aio-arp
2131
vars:
2232
tox_environment:
2333
KUBERNETES_VERSION: 1.26.15
2434

2535
- job:
26-
name: ansible-collection-kubernetes-molecule-jammy-aio-1-27
27-
parent: ansible-collection-kubernetes-molecule-jammy-aio
36+
name: ansible-collection-kubernetes-molecule-jammy-aio-arp-1-27
37+
parent: ansible-collection-kubernetes-molecule-jammy-aio-arp
2838
vars:
2939
tox_environment:
3040
KUBERNETES_VERSION: 1.27.16
3141

3242
- job:
33-
name: ansible-collection-kubernetes-molecule-jammy-aio-1-28
34-
parent: ansible-collection-kubernetes-molecule-jammy-aio
43+
name: ansible-collection-kubernetes-molecule-jammy-aio-arp-1-28
44+
parent: ansible-collection-kubernetes-molecule-jammy-aio-arp
45+
vars:
46+
tox_environment:
47+
KUBERNETES_VERSION: 1.28.13
48+
49+
- job:
50+
name: ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-28
51+
parent: ansible-collection-kubernetes-molecule-jammy-aio-bgp
3552
vars:
3653
tox_environment:
3754
KUBERNETES_VERSION: 1.28.13
3855

3956
- job:
40-
name: ansible-collection-kubernetes-molecule-jammy-aio-1-29
41-
parent: ansible-collection-kubernetes-molecule-jammy-aio
57+
name: ansible-collection-kubernetes-molecule-jammy-aio-arp-1-29
58+
parent: ansible-collection-kubernetes-molecule-jammy-aio-arp
59+
vars:
60+
tox_environment:
61+
KUBERNETES_VERSION: 1.29.12
62+
63+
- job:
64+
name: ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-29
65+
parent: ansible-collection-kubernetes-molecule-jammy-aio-bgp
4266
vars:
4367
tox_environment:
4468
KUBERNETES_VERSION: 1.29.12
4569

4670
- job:
47-
name: ansible-collection-kubernetes-molecule-jammy-aio-1-30
48-
parent: ansible-collection-kubernetes-molecule-jammy-aio
71+
name: ansible-collection-kubernetes-molecule-jammy-aio-arp-1-30
72+
parent: ansible-collection-kubernetes-molecule-jammy-aio-arp
73+
vars:
74+
tox_environment:
75+
KUBERNETES_VERSION: 1.30.8
76+
77+
- job:
78+
name: ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-30
79+
parent: ansible-collection-kubernetes-molecule-jammy-aio-bgp
4980
vars:
5081
tox_environment:
5182
KUBERNETES_VERSION: 1.30.8
@@ -54,15 +85,21 @@
5485
name: ansible-collection-kubernetes-molecule-jammy
5586
check:
5687
jobs:
57-
- ansible-collection-kubernetes-molecule-jammy-aio-1-26
58-
- ansible-collection-kubernetes-molecule-jammy-aio-1-27
59-
- ansible-collection-kubernetes-molecule-jammy-aio-1-28
60-
- ansible-collection-kubernetes-molecule-jammy-aio-1-29
61-
- ansible-collection-kubernetes-molecule-jammy-aio-1-30
88+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-26
89+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-27
90+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-28
91+
- ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-28
92+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-29
93+
- ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-29
94+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-30
95+
- ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-30
6296
gate:
6397
jobs:
64-
- ansible-collection-kubernetes-molecule-jammy-aio-1-26
65-
- ansible-collection-kubernetes-molecule-jammy-aio-1-27
66-
- ansible-collection-kubernetes-molecule-jammy-aio-1-28
67-
- ansible-collection-kubernetes-molecule-jammy-aio-1-29
68-
- ansible-collection-kubernetes-molecule-jammy-aio-1-30
98+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-26
99+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-27
100+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-28
101+
- ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-28
102+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-29
103+
- ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-29
104+
- ansible-collection-kubernetes-molecule-jammy-aio-arp-1-30
105+
- ansible-collection-kubernetes-molecule-jammy-aio-bgp-1-30

0 commit comments

Comments
 (0)