Skip to content

Commit

Permalink
notes 섹션 추가 및 Tailscale HA 글 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
kyokugirl committed Jan 7, 2025
1 parent 701d1b1 commit 6d1992a
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 0 deletions.
1 change: 1 addition & 0 deletions config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ recent_more_text = "more »"

sections = [
{ name = "posts", path = "/posts", is_external = false },
{ name = "notes", path = "/notes", is_external = false },
# { name = "projects", path = "/projects", is_external = false },
# { name = "about", path = "/about", is_external = false },
# { name = "github", path = "https://github.com/<your-username>", is_external = true },
Expand Down
9 changes: 9 additions & 0 deletions content/notes/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
+++
title = "notes"
description = "짧은 기록들"
sort_by = "date"
template = "blog.html"
page_template = "post.html"
insert_anchor_links = "right"
generate_feeds = true
+++
81 changes: 81 additions & 0 deletions content/notes/tailscale-ha.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
+++
title = "Tailscale을 이용한 HA 구성"
date = 2025-01-07
description = "Subnet Router와 loopback 어댑터를 활용한 HA 환경 구성"
[taxonomies]
categories = ["infra"]
tags = ["tailscale", "network"]
[extra]
lang = "ko"
toc = true
+++

여러 Control Plane 노드를 가지는 HA 쿠버네티스 클러스터 구성을 위해서는 노드들 간에 공유될 수 있는 단일 엔드포인트가 필요한데,
이를 위해 Tailscale의 Subnet Router 기능을 이용한 HA 환경을 구성했다.

## 왜 Tailscale을 사용하여 HA를 구성하였나?

현재 클러스터 구성 시 서버 간 네트워킹을 위해 Tailscale을 이용하고 있는데,
공식 문서가 권한 HA 구성 방식인 keepalived와 HAProxy를 활용한 셋업은 Tailscale 라우터가 지원하지 않는 VRRP 프로토콜을 사용하기 때문에 부적합했다.
대신 Tailscale 자체 기능을 활용해 HA를 구성하여 이 문제를 해결하고자 했다.

## 문제 상황
- 1개의 Debian과 3개의 Armbian 서버로 구성되어 있다.
- 모든 서버가 동일한 가상 IP로부터 요청을 받을 수 있어야 한다.

## 서버의 Network Manager 파악

가상 IP 설정을 위해, 각 서버들이 사용 중인 Network Manager를 확인해 보았다.
`ifupdown`, `netplan`, `wicd` 등등이 사용된다. `systemctl status ${네트워크 메니저}` 명령어를 사용하여 사용 중인 Network Manager를 확인하였다.
현재 환경 기준으로 Debian 서버는 `systemd-networkd`를 사용하고 있고, 다른 Armbian 서버들은 `NetworkManager`를 사용하고 있다.


## `systemd-networkd` 를 통한 loopback 설정

서버의 네트워크 설정을 수정하기 위해 다음 문서를 참고하여 `systemd-networkd`를 통해 loopback을 설정했다.
참고 문서: [`systemd-networkd` 설정](https://wiki.debian.org/SystemdNetworkd)

1. network device 설정을 위해 `/etc/systemd/network/lo1.netdev` 파일을 생성한다.
```ini
[NetDev]
Name=lo1
Kind=dummy
```
2. network link 설정을 위해 `/etc/systemd/network/lo1.network` 파일을 생성한다.
```ini
[Match]
Name=lo1

[Network]
Address="사설 IP 대역대 내의 임의의 CIDR"
```
3. `networkctl reload` 명령을 실행하여 1, 2의 설정을 적용한 후, `networkctl status` 명령을 실행하여 loopback 설정을 확인한다.
![img](/assets/images/tailscale-ha/networkctl-status.png)

## `NetworkManager`를 통한 loopback 설정

서버의 네트워크 설정을 수정하기 위해 다음 문서를 참고하여 `NetworkManager`를 통해 loopback을 설정했다.
참고 문서: [`NetworkManager` 설정](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/creating-a-dummy-interface_configuring-and-managing-networking), [`NetworkManager` Reference Manual](https://networkmanager.dev/docs/api/latest/nm-settings-keyfile.html)

1. `nmcli` 명령어를 사용하여 dummy 생성
```sh
sudo nmcli connection add type dummy \
ifname lo1 \
con-name lo1 \
ipv4.method manual \
ipv4.addresses ${사설 IP 대역대 내의 임의의 CIDR} \
ipv6.method ignore
```

## Tailscale 설정

Tailscale을 통해 위에서 생성한 loopback을 tailnet 전체로 노출했다.
참고 문서: [Set up high availability](https://tailscale.com/kb/1115/high-availability#subnet-router-high-availability)

1. Tailscale subnet router 설정
```sh
sudo tailscale up --advertise-routes ${위 단계에서 생성한 loopback의 CIDR}
```
2. Subnet router 설정 허용
콘솔의 "Edit Route Settings" 내에서 새로 추가한 subnet router 대역을 허용 처리한다.
![img](/assets/images/tailscale-ha/tailscale-console.png)
9 changes: 9 additions & 0 deletions content/posts/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
+++
title = "posts"
description = "블로그 글들"
sort_by = "date"
template = "blog.html"
page_template = "post.html"
insert_anchor_links = "right"
generate_feeds = true
+++
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 6d1992a

Please sign in to comment.