Metallb BGP support (#212)
* Add metallb frr and bgp support * Set metallb mode to layer2 as default in sample * Add BGP resource check * Add automatic downloading of metallb-frr * Remove frr manifest
This commit is contained in:
parent
5a7ba98968
commit
dc2976e7f6
@ -43,7 +43,19 @@ extra_agent_args: >-
|
|||||||
# image tag for kube-vip
|
# image tag for kube-vip
|
||||||
kube_vip_tag_version: "v0.5.7"
|
kube_vip_tag_version: "v0.5.7"
|
||||||
|
|
||||||
|
# metallb type frr or native
|
||||||
|
metal_lb_type: "native"
|
||||||
|
|
||||||
|
# metallb mode layer2 or bgp
|
||||||
|
metal_lb_mode: "layer2"
|
||||||
|
|
||||||
|
# bgp options
|
||||||
|
# metal_lb_bgp_my_asn: "64513"
|
||||||
|
# metal_lb_bgp_peer_asn: "64512"
|
||||||
|
# metal_lb_bgp_peer_address: "192.168.30.1"
|
||||||
|
|
||||||
# image tag for metal lb
|
# image tag for metal lb
|
||||||
|
metal_lb_frr_tag_version: "v7.5.1"
|
||||||
metal_lb_speaker_tag_version: "v0.13.7"
|
metal_lb_speaker_tag_version: "v0.13.7"
|
||||||
metal_lb_controller_tag_version: "v0.13.7"
|
metal_lb_controller_tag_version: "v0.13.7"
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,16 @@
|
|||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
mode: 0644
|
mode: 0644
|
||||||
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] and metal_lb_type == "native"
|
||||||
|
|
||||||
|
- name: Download metallb-frr manifest to first master
|
||||||
|
ansible.builtin.get_url:
|
||||||
|
url: "https://raw.githubusercontent.com/metallb/metallb/{{ metal_lb_controller_tag_version }}/config/manifests/metallb-frr.yaml" # noqa yaml[line-length]
|
||||||
|
dest: "/var/lib/rancher/k3s/server/manifests/metallb-frr-crds.yaml"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] and metal_lb_type == "frr"
|
||||||
|
|
||||||
- name: Set image versions for metallb manifest
|
- name: Set image versions for metallb manifest
|
||||||
ansible.builtin.replace:
|
ansible.builtin.replace:
|
||||||
@ -27,4 +36,16 @@
|
|||||||
to: "metallb/speaker:{{ metal_lb_speaker_tag_version }}"
|
to: "metallb/speaker:{{ metal_lb_speaker_tag_version }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{ item.change }} => {{ item.to }}"
|
label: "{{ item.change }} => {{ item.to }}"
|
||||||
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] and metal_lb_type == "native"
|
||||||
|
|
||||||
|
- name: Set image versions for metallb-frr manifest
|
||||||
|
ansible.builtin.replace:
|
||||||
|
path: "/var/lib/rancher/k3s/server/manifests/metallb-frr-crds.yaml"
|
||||||
|
regexp: "{{ item.change | ansible.builtin.regex_escape }}"
|
||||||
|
replace: "{{ item.to }}"
|
||||||
|
with_items:
|
||||||
|
- change: "metallb/speaker:{{ metal_lb_controller_tag_version }}"
|
||||||
|
to: "metallb/speaker:{{ metal_lb_speaker_tag_version }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.change }} => {{ item.to }}"
|
||||||
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] and metal_lb_type == "frr"
|
||||||
|
|||||||
@ -79,11 +79,23 @@
|
|||||||
until: this.rc == 0
|
until: this.rc == 0
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
||||||
- name: Test metallb-system resources
|
- name: Test metallb-system resources for Layer 2 configuration
|
||||||
command: >-
|
command: >-
|
||||||
k3s kubectl -n metallb-system get {{ item }}
|
k3s kubectl -n metallb-system get {{ item }}
|
||||||
changed_when: false
|
changed_when: false
|
||||||
run_once: true
|
run_once: true
|
||||||
|
when: metal_lb_mode == "layer2"
|
||||||
with_items:
|
with_items:
|
||||||
- IPAddressPool
|
- IPAddressPool
|
||||||
- L2Advertisement
|
- L2Advertisement
|
||||||
|
|
||||||
|
- name: Test metallb-system resources for BGP configuration
|
||||||
|
command: >-
|
||||||
|
k3s kubectl -n metallb-system get {{ item }}
|
||||||
|
changed_when: false
|
||||||
|
run_once: true
|
||||||
|
when: metal_lb_mode == "bgp"
|
||||||
|
with_items:
|
||||||
|
- IPAddressPool
|
||||||
|
- BGPPeer
|
||||||
|
- BGPAdvertisement
|
||||||
|
|||||||
@ -13,9 +13,31 @@ spec:
|
|||||||
{% for range in metal_lb_ip_range %}
|
{% for range in metal_lb_ip_range %}
|
||||||
- {{ range }}
|
- {{ range }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if metal_lb_mode == "layer2" %}
|
||||||
---
|
---
|
||||||
apiVersion: metallb.io/v1beta1
|
apiVersion: metallb.io/v1beta1
|
||||||
kind: L2Advertisement
|
kind: L2Advertisement
|
||||||
metadata:
|
metadata:
|
||||||
name: default
|
name: default
|
||||||
namespace: metallb-system
|
namespace: metallb-system
|
||||||
|
{% endif %}
|
||||||
|
{% if metal_lb_mode == "bgp" %}
|
||||||
|
---
|
||||||
|
apiVersion: metallb.io/v1beta2
|
||||||
|
kind: BGPPeer
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
namespace: metallb-system
|
||||||
|
spec:
|
||||||
|
myASN: {{ metal_lb_bgp_my_asn }}
|
||||||
|
peerASN: {{ metal_lb_bgp_peer_asn }}
|
||||||
|
peerAddress: {{ metal_lb_bgp_peer_address }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: metallb.io/v1beta1
|
||||||
|
kind: BGPAdvertisement
|
||||||
|
metadata:
|
||||||
|
name: default
|
||||||
|
namespace: metallb-system
|
||||||
|
{% endif %}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user