keepalived: Initial commit
Running `keepalived` as a DaemonSet will allow managing floating "virtual" IP addresses for Kubernetes services with configured external IP addresses. The main services we want to expose outside the cluster are _ingress-nginx_, Mosquitto, and RabbitMQ. The `keepalived` cluster will negotiate using the VRRF protocol to determine which node should have each external address. Using the process tracking feature of `keepalived`, we can steer traffic directly to the node where the target service is running.pull/37/head
parent
5c78bb89b5
commit
e7ea2b0659
|
@ -0,0 +1,60 @@
|
||||||
|
# vim: set sw=4 ts=4 sts=4 et:
|
||||||
|
includea /run/keepalived.interface
|
||||||
|
|
||||||
|
global_defs {
|
||||||
|
max_auto_priority 79
|
||||||
|
}
|
||||||
|
|
||||||
|
vrrp_track_process ingress-nginx {
|
||||||
|
process nginx-ingress-c
|
||||||
|
weight 90
|
||||||
|
}
|
||||||
|
|
||||||
|
vrrp_track_process mosquitto {
|
||||||
|
process mosquitto
|
||||||
|
weight 90
|
||||||
|
}
|
||||||
|
|
||||||
|
vrrp_track_process rabbitmq {
|
||||||
|
process rabbitmq-server
|
||||||
|
weight 90
|
||||||
|
}
|
||||||
|
|
||||||
|
vrrp_instance ingress-nginx {
|
||||||
|
state BACKUP
|
||||||
|
priority 100
|
||||||
|
interface ${INTERFACE}
|
||||||
|
virtual_router_id 51
|
||||||
|
virtual_ipaddress {
|
||||||
|
172.30.0.147/28
|
||||||
|
}
|
||||||
|
track_process {
|
||||||
|
ingress-nginx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vrrp_instance mosquitto {
|
||||||
|
state BACKUP
|
||||||
|
priority 100
|
||||||
|
interface ${INTERFACE}
|
||||||
|
virtual_router_id 52
|
||||||
|
virtual_ipaddress {
|
||||||
|
172.30.0.148/28
|
||||||
|
}
|
||||||
|
track_process {
|
||||||
|
mosquitto
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vrrp_instance rabbitmq {
|
||||||
|
state BACKUP
|
||||||
|
priority 100
|
||||||
|
interface ${INTERFACE}
|
||||||
|
virtual_router_id 53
|
||||||
|
virtual_ipaddress {
|
||||||
|
172.30.0.149/28
|
||||||
|
}
|
||||||
|
track_process {
|
||||||
|
rabbitmq
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: keepalived
|
||||||
|
labels: &labels
|
||||||
|
app.kubernetes.io/name: keepalived
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels: *labels
|
||||||
|
minReadySeconds: 10
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels: *labels
|
||||||
|
spec:
|
||||||
|
initContainers:
|
||||||
|
- name: init
|
||||||
|
image: docker.io/library/busybox
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
printf '$INTERFACE=%s\n' \
|
||||||
|
$(ip route | awk '/^default via/{print $5}') \
|
||||||
|
> /run/keepalived.interface
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /run
|
||||||
|
name: tmp
|
||||||
|
subPath: run
|
||||||
|
containers:
|
||||||
|
- name: keepalived
|
||||||
|
image: git.pyrocufflink.net/containerimages/keepalived:dev
|
||||||
|
imagePullPolicy: Always
|
||||||
|
command:
|
||||||
|
- keepalived
|
||||||
|
- -nGlD
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /etc/keepalived
|
||||||
|
name: config
|
||||||
|
readOnly: true
|
||||||
|
- mountPath: /run
|
||||||
|
name: tmp
|
||||||
|
subPath: run
|
||||||
|
hostNetwork: true
|
||||||
|
hostPID: true
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: keepalived
|
||||||
|
- name: tmp
|
||||||
|
emptyDir:
|
||||||
|
medium: Memory
|
|
@ -0,0 +1,24 @@
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
labels:
|
||||||
|
- pairs:
|
||||||
|
app.kubernetes.io/component: keepalived
|
||||||
|
app.kubernetes.io/instance: keepalived
|
||||||
|
includeSelectors: true
|
||||||
|
includeTemplates: true
|
||||||
|
- pairs:
|
||||||
|
app.kubernetes.io/part-of: keepalived
|
||||||
|
|
||||||
|
namespace: keepalived
|
||||||
|
|
||||||
|
resources:
|
||||||
|
- keepalived.yaml
|
||||||
|
|
||||||
|
configMapGenerator:
|
||||||
|
- name: keepalived
|
||||||
|
files:
|
||||||
|
- keepalived.conf
|
||||||
|
options:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: keepalived
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: keepalived
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: keepalived
|
Loading…
Reference in New Issue