echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.conf
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
cat /proc/sys/net/ipv4/ip_nonlocal_bind
setsebool -P haproxy_connect_any=1
yum -y install haproxy
vi /etc/haproxy/haproxy.cfg
global
# 로깅을 위한 설정
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 30m
timeout server 30m
timeout http-keep-alive 60s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# status web 설정
#---------------------------------------------------------------------
listen hastats
mode http
bind *:8080
stats enable
stats show-legends
stats uri /haproxy-status
stats auth username:password
#---------------------------------------------------------------------
# 프론트 엔드 설정
# 프론트 엔드에서 설정한 포트로 연결이 들어올 경우 백엔드로 보낸다
#---------------------------------------------------------------------
frontend kubeproxy
bind *:16443
default_backend kubeproxy
mode tcp
#16443으로 연결이 들어올 때 kubeproxy라는 백엔드로 연결
#---------------------------------------------------------------------
# 백엔드 설정
#---------------------------------------------------------------------
backend kubeproxy
balance roundrobin
mode tcp
option tcp-check
option tcplog
server k8s01 192.168.103.101:6443 check
server k8s02 192.168.103.102:6443 check
#프록시 멤버 숫자만큼 추가
# main frontend의 16443으로 연결이 들어오면 백엔드의 주소로 순차적으로 프록시(roundrobin일경우)
값 | 설명 |
---|---|
global | 전체 영역에 걸쳐 적용되는 기본 설정 |
defaults | 이후 오는 영역(frontend, backend, listen)에 적용되는 설정 |
frontend | 클라이언트 연결을 받아들이는 소켓에 대한 설정 |
backend | 앞에서 들어온 연결에 할당될 프록시 서버들에 대한 설정 |
listen | frontend와 backend로 사용되는 포트를 한번에 설정하는 영역으로 TCP 프록시에서만 이용 |
값 | 설명 |
---|---|
Roundrobin | 순차적으로 분배 |
static-rr | 서버에 부여된 가중치에 따라서 분배 |
leastconn | 접속수가 가장 적은 서버로 분배 |
source | 운영중인 서버의 가중치를 나눠서 접속자 IP 해싱(hashing)해서 분배 |
uri | 접속하는 URI를 해싱해서 운영중인 서버의 가중치를 나눠서 분배 (URI의 길이 또는 depth로 해싱) |
url_param | HTTP GET 요청에 대해서 특정 패턴이 있는지 여부 확인 후 조건에 맞는 서버로 분배 (조건 없는 경우 round_robin으로 처리) |
hdr | HTTP 헤더에서 hdr()으로 지정된 조건이 있는 경우에 대해서만 분배 (조건없는 경우 round robin 으로 처리) |
rdp-cookie | TCP 요청에 대한 RDP 쿠키에 따른 분배 |