概要
ルーターにインストールされた OpenWrt にhaproxyをインストールします。
ここでは、ルーターのIPアドレスが 192.168.1.100、k8sのコントロールプレーンを構成するホストは 192.168.1.201, 202, 203 です。
インストール
$ ssh root@192.168.1.100
BusyBox v1.36.1 (2024-03-22 22:09:42 UTC) built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 23.05.3, r23809-234f1a2efa
-----------------------------------------------------
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg list | grep haproxy haproxy - 2.8.6-1 - Open source Reliable, High Performance TCP/HTTP Load Balancer. This package is built with SSL and LUA support. haproxy-nossl - 2.8.6-1 - Open source Reliable, High Performance TCP/HTTP Load Balancer. This package is built without SSL support.
root@OpenWrt:~# opkg install haproxy Installing haproxy (2.8.6-1) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/packages/haproxy_2.8.6-1_arm_cortex-a9.ipk Installing libpcre2 (10.42-1) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/libpcre2_10.42-1_arm_cortex-a9.ipk Installing libltdl7 (2.4.7-1) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/libltdl7_2.4.7-1_arm_cortex-a9.ipk Installing zlib (1.2.13-1) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/zlib_1.2.13-1_arm_cortex-a9.ipk Installing liblua5.3-5.3 (5.3.5-5) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/liblua5.3-5.3_5.3.5-5_arm_cortex-a9.ipk Installing libatomic1 (12.3.0-4) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/targets/bcm53xx/generic/packages/libatomic1_12.3.0-4_arm_cortex-a9.ipk Installing libopenssl3 (3.0.13-1) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/libopenssl3_3.0.13-1_arm_cortex-a9.ipk Installing terminfo (6.4-2) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/terminfo_6.4-2_arm_cortex-a9.ipk Installing libncurses6 (6.4-2) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/libncurses6_6.4-2_arm_cortex-a9.ipk Installing libreadline8 (8.2-1) to root... Downloading https://downloads.openwrt.org/releases/23.05.3/packages/arm_cortex-a9/base/libreadline8_8.2-1_arm_cortex-a9.ipk Configuring terminfo. Configuring libatomic1. Configuring libopenssl3. Configuring libpcre2. Configuring libltdl7. Configuring zlib. Configuring liblua5.3-5.3. Configuring libncurses6. Configuring libreadline8. Configuring haproxy.
設定
/etc/haproxy.cfg
Exampleの部分は全てコメントアウトし、下記を追加します。
listen kubernetes
bind :6443
option tcplog
log global
log 127.0.0.1 local0
mode tcp
balance roundrobin
server k8s-ctrl1 192.168.1.201:6443 check fall 3 rise 2
server k8s-ctrl2 192.168.1.202:6443 check fall 3 rise 2
server k8s-ctrl3 192.168.1.203:6443 check fall 3 rise 2
Exampleのコメントアウトの部分を除くと、下記のようになりました。
# Example configuration file for HAProxy 2.0, refer to the url below for
# a full documentation and examples for configuration:
# https://cbonte.github.io/haproxy-dconv/2.0/configuration.html
# Global parameters
global
# Log events to a remote syslog server at given address using the
# specified facility and verbosity level. Multiple log options
# are allowed.
#log 10.0.0.1 daemon info
# Specifiy the maximum number of allowed connections.
maxconn 32000
# Raise the ulimit for the maximum allowed number of open socket
# descriptors per process. This is usually at least twice the
# number of allowed connections (maxconn * 2 + nb_servers + 1) .
ulimit-n 65535
# Drop privileges (setuid, setgid), default is "root" on OpenWrt.
uid 0
gid 0
# Perform chroot into the specified directory.
#chroot /var/run/haproxy/
# Daemonize on startup
daemon
nosplice
# Enable debugging
#debug
# Spawn given number of processes and distribute load among them,
# used for multi-core environments or to circumvent per-process
# limits like number of open file descriptors. Default is 1.
#nbproc 2
# Default parameters
defaults
# Default timeouts
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen kubernetes
bind :6443
option tcplog
log global
log 127.0.0.1 local0
mode tcp
balance roundrobin
server k8s-ctrl1 192.168.1.201:6443 check fall 3 rise 2
server k8s-ctrl2 192.168.1.202:6443 check fall 3 rise 2
server k8s-ctrl3 192.168.1.203:6443 check fall 3 rise 2
動作チェック(最低限)
$ nc -v 192.168.1.100 6443 Connection to 192.168.1.100 6443 port [tcp/*] succeeded!
参考

Creating Highly Available Kubernetes Cluster using kubeadm
In this article, I’m going to build a kubernetes cluster using kubeadm. There are two options we can follow.
Creating Highly Available Clusters with kubeadm
This page explains two different approaches to setting up a highly available Kubernetes cluster using kubeadm:With stacked control plane nodes. This approach re...
