haproxy

package
v0.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 5, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ReasonUnsupportedCombination = "UnsupportedCombination"

	MsgHTTPBalanceInTCP = "http-based balance algorithm is not allowed in tcp mode"
	MsgHTTPChkInTCP     = "httpchk is not allowed in tcp mode"

	MsgSendProxyInHTTP  = "send-proxy is not allowed in http mode"
	MsgSendProxy2InHTTP = "send-proxy-v2 is not allowed in http mode"
	MsgTCPKAInHTTP      = "tcpka is not allowed in http mode"

	// Frontend Messages
	MsgDefaultBackendEmpty = "default-backend empty"
)

Variables

This section is empty.

Functions

func AdvCheckValidationRule added in v0.1.3

func AdvCheckValidationRule(b *BackendRequest) error

func DefaultBackendModeRule added in v0.1.3

func DefaultBackendModeRule(b *BackendRequest) error

func DefaultFrontendModeRule added in v0.1.3

func DefaultFrontendModeRule(f *FrontendRequest) error

func DefaultServerValidateRule added in v0.1.3

func DefaultServerValidateRule(b *BackendRequest) error

func TCPBalanceRule added in v0.1.3

func TCPBalanceRule(b *BackendRequest) error

func ValidateFronend added in v0.1.3

func ValidateFronend(request *FrontendRequest) error

Types

type API added in v0.1.3

type API interface {
	// reader
	GetBackendNames(ctx context.Context) ([]string, error)
	GetBackendServers(ctx context.Context, backendName string) (*[]ServerRequest, error)

	// writer
	CreateBackend(ctx context.Context, request *BackendRequest) error
	AddBackendServer(ctx context.Context, backendName string, body *ServerRequest) error
	DeleteBackendServer(ctx context.Context, backendName, serverName string) error
	DeleteBackend(ctx context.Context, name string) error
	AddBackendOptions(ctx context.Context, backendName string, opts any) error
	CreateFrontend(ctx context.Context, body *FrontendRequest) error
	AddFrontendBinds(ctx context.Context, frontendName string, body *FrontendBindRequest) error
	DeleteFrontend(ctx context.Context, name string) error
}

type BackendNormalizer added in v0.1.3

type BackendNormalizer struct {
	// contains filtered or unexported fields
}

func (*BackendNormalizer) Normalize added in v0.1.3

func (n *BackendNormalizer) Normalize(b *BackendRequest) error

type BackendRequest

type BackendRequest struct {
	Name string `json:"name"`           // Имя бэкенда
	Mode string `json:"mode,omitempty"` // Режим работы (tcp, http)

	// Определяет алгоритм балансировки нагрузки для бэкенда.
	// Может использоваться в контекстах: tcp, http, log
	Balance Balance `json:"balance"`

	// Дополнительные проверки сервера.
	// Допустимые значения: httpchk┃ldap-check┃mysql-check┃pgsql-check┃redis-check┃smtpchk┃ssl-hello-chk┃tcp-check
	AdvCheck string `json:"adv_check,omitempty"`

	// Изменение опций по умолчанию для серверов в бэкенде
	// Может использоваться в контекстах: tcp, http
	DefaultServer DefaultServer `json:"default_server"`

	// Включение или отключение отправки TCP keepalive пакетов со стороны клиента
	// Может использоваться в контекстах: tcp, http
	TCPKeepAlive string `json:"tcpka,omitempty"`

	// Включение вставки заголовка X-Forwarded-For в запросы к серверам
	// Может использоваться в контекстах: http
	ForwardFor *ForwardFor `json:"forwardfor,omitempty"`

	// Установка максимального времени ожидания для успешного подключения к серверу
	// Может использоваться в контекстах: tcp, http, log
	ConnectTimeout int64 `json:"connect_timeout,omitempty"`

	// Установка максимального времени бездействия на стороне сервера
	// Может использоваться в контекстах: tcp, http, log
	ServerTimeout int64 `json:"server_timeout,omitempty"`
}

func (*BackendRequest) RequiresBackendHTTP

func (b *BackendRequest) RequiresBackendHTTP() bool

type BackendRule added in v0.1.3

type BackendRule func(*BackendRequest) error

type Balance

type Balance struct {
	// Allowed: first┃hash┃hdr┃leastconn┃random┃rdp-cookie┃roundrobin┃source┃static-rr┃uri┃url_param
	Algorithm string `json:"algorithm,omitempty"`
}

type Check

type Check string
const (
	ServerCheckEnabled  Check = "enabled"
	ServerCheckDisabled Check = "disabled"
)

type Client

type Client struct {
	BaseURL    string
	HTTPClient *http.Client
	Username   string
	Password   string
	Log        *slog.Logger
}

func (*Client) AddBackendOptions

func (c *Client) AddBackendOptions(ctx context.Context, backendName string, opts any) error

func (*Client) AddBackendServer

func (c *Client) AddBackendServer(ctx context.Context, backendName string, body *ServerRequest) error

func (*Client) AddFrontendBinds

func (c *Client) AddFrontendBinds(ctx context.Context, frontendName string, body *FrontendBindRequest) error

func (*Client) CreateBackend

func (c *Client) CreateBackend(ctx context.Context, request *BackendRequest) error

func (*Client) CreateFrontend

func (c *Client) CreateFrontend(ctx context.Context, body *FrontendRequest) error

func (*Client) DeleteBackend

func (c *Client) DeleteBackend(ctx context.Context, name string) error

func (*Client) DeleteBackendServer

func (c *Client) DeleteBackendServer(ctx context.Context, backendName, serverName string) error

func (*Client) DeleteFrontend

func (c *Client) DeleteFrontend(ctx context.Context, name string) error

func (*Client) GetBackendNames

func (c *Client) GetBackendNames(ctx context.Context) ([]string, error)

func (*Client) GetBackendServers

func (c *Client) GetBackendServers(ctx context.Context, backendName string) (*[]ServerRequest, error)

func (*Client) GetConfigVersion

func (c *Client) GetConfigVersion(ctx context.Context) (int64, error)

type DefaultServer

type DefaultServer struct {
	// https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#5.2-inter
	// inter <delay> — интервал между обычными health check в миллисекундах (по умолчанию 2000 ms).
	// Используется, когда сервер в стабильном состоянии UP.
	Inter int64 `json:"inter,omitempty"`

	// fastinter <delay> — сокращённый интервал для промежуточных состояний сервера
	// (например, когда он транзитом уходит в DOWN или восстанавливается).
	Fastinter int64 `json:"fastinter,omitempty"`

	// fall <count> — сервер считается неработоспособным (DOWN) после <count>
	// подряд неудачных health check (по умолчанию 3).
	// Используется вместе с check, inter и rise для настройки проверки состояния серверов.
	Fall int64 `json:"fall,omitempty"`
	Rise int64 `json:"rise,omitempty"`

	// Currently one action is available: shutdown-sessions
	OnMarkedDown string `json:"on-marked-down,omitempty"`

	// https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#send-proxy
	// send-proxy заставляет HAProxy использовать PROXY protocol при соединении с сервером,
	// передавая реальный IP клиента и адрес, к которому подключились.
	// Сервер должен поддерживать PROXY protocol, иначе это сломает соединение.
	// Подходит для цепочек HAProxy и TCPv4/6 соединений. Для health check PROXY protocol
	// включается автоматически, если не указаны port или addr.
	SendProxy string `json:"send-proxy,omitempty"`

	// Тоже самое что и send-proxy но с поддержкой расширенной информации и ALPN.
	SendProxy2 string `json:"send-proxy-v2,omitempty"`
}

type ForwardFor

type ForwardFor struct {
	Enabled string `json:"enabled"` // Включение/отключение вставки X-Forwarded-For

	// Можно исключить добавление заголовка для определённого IP или сети,
	// указав "except" и адрес сети. В этом случае запросы с этими IP не будут получать заголовок.
	// Чаще всего используется для приватных сетей или 127.0.0.1. Поддерживаются IPv4 и IPv6.
	Except string `json:"except,omitempty"`

	// Имя конкретного заголовка, который нужно вставлять.
	Header string `json:"header,omitempty"`

	// Ключевое слово "if-none" означает, что заголовок будет добавлен
	// только если его ещё нет. Использовать только в полностью доверенной среде,
	// иначе это может создать уязвимость, если заголовки, поступающие в HAProxy,
	// контролируются пользователем.
	IfNone bool `json:"ifnone,omitempty"`
}

type FrontendBindRequest

type FrontendBindRequest struct {
	Name    string `json:"name"`
	Address string `json:"address"`
	Port    int32  `json:"port"`
}

type FrontendNormalizer added in v0.1.3

type FrontendNormalizer struct {
	// contains filtered or unexported fields
}

func (*FrontendNormalizer) Normalize added in v0.1.3

func (n *FrontendNormalizer) Normalize(b *FrontendRequest) error

type FrontendRequest

type FrontendRequest struct {
	Name           string `json:"name"`
	DefaultBackend string `json:"default_backend"`
	Mode           string `json:"mode,omitempty"`

	// Устанавливает максимальное время бездействия на стороне клиента.
	// Может использоваться в следующих контекстах: tcp, http
	ClientTimeout int64 `json:"client_timeout,omitempty"`
}

type FrontendRule added in v0.1.3

type FrontendRule func(*FrontendRequest) error

type ServerRequest

type ServerRequest struct {
	Name    string `json:"Name"`
	Address string `json:"address"`
	Port    int32  `json:"port"`
	Check   Check  `json:"check,omitempty"`
}

type ValidationError

type ValidationError struct {
	Reason  string
	Message string
	Field   string
}

type ValidationErrors

type ValidationErrors struct {
	Errors []*ValidationError
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL