카테고리 보관물:  IT

AWS GWLB Review

IDC와 AWS Cloud가 DX로 연결된 하이브리드 클라우드 환경이었고 기존 Legacy IPS가 도태됨에 따라 보안 요건에 의해 AWS Cloud에 IPS 구성이 필요한 상황 이었습니다.

그에 따라 GWLB*를 검토하였고 신규 도입되는 Cisco IPS의 Geneve Protocol** 지원 여부를 검토 하였으며 다행히 지원이 가능한 스펙인 것을 확인했습니다.

설계 단계에서 기존 Network Architecture를 크게 변경시킬 경우 여러 account의 VPC에 영향이 있을 가능성이 있어 TGW등의 형상 변경은 최소화 하는 방향으로 진행하였고 IDC에서 DX를 거쳐 AWS로 진입하는 구간의 VPC에 GWLB Endpoint를 위치 시키고 별도의 Inspection VPC를 구성하여 해당 VPC에 GWLB와 GWLB Endpoint Service를 위치 시켰습니다.

그리고 진입구간 VPC의 라우팅 테이블에 Next hop을 GWLB Endpoint로 지정하고 GWLB Endpoint가 위치한 서브넷의 라우팅 테이블은 외부로 트래픽 처리가 되도록 기존 구성을 유지 시켰습니다.

이로서 DX를 거치는 모든 inbound/outbound 패킷은 GWLB Endpoint로 전달 되어 GWLB를 통해 IPS로 Inspection 되도록 하였고 Inspection이 끝난 패킷은 다시 GWLB Endpoint가 위치한 서브넷으로 되돌아와 정상적으로 라우팅 처리 되도록 하였습니다.

ALB, NLB 등과 GWLB의 구성상 차이점은 ALB 등은 Endpoint 구성시 AZ를 복수 선택하여 가용성 유지가 가능했지만 GWLB는 Endpoint 구성시 AZ를 1개만 선택이 가능했습니다.
라우팅테이블의 Nexthop에 GWLB Endpoint를 지정할 경우 1개의 AZ로만 트래픽이 흐르게 되어 구조상 가용성 유지에 문제가 발생하였습니다.

이를 해결하기 위해 AZ 단위로 라우팅 테이블 분리하고 각 AZ별로 GWLB Endpoint를 생성 후 지정하였지만 예를 들어 AWS Cloud C존에서 출발한 트래픽이 DX를 거쳐 IDC 통해 SYN 처리 후 SYN/ACK 처리시 A존으로 인입 된 후 IPS에 도달 하게 되면 세션 테이블과 불일치 하며 Asymmetric 트래픽을 Drop 처리 하는 현상이 발생 하였습니다.

결국 AZ단위 라우팅 테이블 분리는 적절하지 않은 구성이었고 가용성 확보를 위해 AZ 단위 트래픽 이상을 감시하는 Event Bridge 를 구성하고 Trigger용 Lambda와 라우팅테이블 Nexthop을 변경 하는 Lambda를 개발하여 보완 하였습니다.

패킷 감시용 어플라이언스를 사용하기 위해서는 필수적인 LB이지만 트래픽 흐름의 누수나 루프가 발생하지 않는지에 대한 신중한 검토가 필요한 구성이었습니다.

* GWLB(GateWay Load Balancer) : L3 기반 트래픽을 Geneve Protocol을 이용하여 타겟 그룹으로 전달 하여 Inspection 처리
https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/gateway/introduction.html
https://aws.amazon.com/ko/blogs/korea/introducing-aws-gateway-load-balancer-easy-deployment-scalability-and-high-availability-for-partner-appliances/

** Geneve Protocol(Generic Network Virtualization Encapsulation) : 과거 VXLAN과 같은 개념의 표준화된 Protocol로 UDP 6081 포트를 통해 Ethernet Frame을 캡슐화 하여 전달
https://www.redhat.com/en/blog/what-geneve
https://aws-hyoh.tistory.com/246

gitlab-runner container 생성 및 GitLab 등록

Container 환경에서 gitlab-runner를 생성하고 GitLab에 등록 하는 절차에 관한 내용 입니다.

  1. Container 생성
[test@test-runner ~]$ docker run --detach \
> --name gitlab-runner \
> --restart always \
> --volume /srv/gitlab-runner/config:/etc/gitlab-runner \
> --volume /var/run/docker.sock:/var/run/docker.sock \
> gitlab/gitlab-runner:latest
Unable to find image 'gitlab/gitlab-runner:latest' locally
latest: Pulling from gitlab/gitlab-runner
d9802f032d67: Pull complete
d71acd29818d: Pull complete
2df872e9a082: Pull complete
Digest: sha256:c7e23480375fca186743d8fbf6eff3b682da48b70a9d2980ce89863571fb6fa8
Status: Downloaded newer image for gitlab/gitlab-runner:latest
4f0eb91d3bd9cdc008545ab664e5746de3eefff6f92fce380dd4b29d290c8154
[test@test-runner ~]$ docker ps -a
CONTAINER ID   IMAGE                         COMMAND                  CREATED              STATUS              PORTS     NAMES
4f0eb91d3bd9   gitlab/gitlab-runner:latest   "/usr/bin/dumb-init …"   About a minute ago   Up About a minute             gitlab-runner

2. gitlab-runner 등록을 위한 token 정보 확인

3. 생성된 gitlab-runner를 GitLab에 등록

[test@test-runner ~]$ docker container exec -it gitlab-runner bash
root@4f0eb91d3bd9:/# gitlab-runner register -n \
> --url http://192.168.0.100:8081/ \
> --registration-token <gitlab token> \
> --description gitlab-runner \
> --executor docker \
> --docker-image docker:latest \
> --docker-volumes /var/run/docker.sock:/var/run/docker.sock
Runtime platform                                    arch=amd64 os=linux pid=24 revision=374d34fd version=17.6.0
Running in system-mode.

WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://docs.gitlab.com/ee/ci/runners/new_creation_workflow
Registering runner... succeeded                     runner=JdXqqyrV
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

4. gitlab-runner 등록 확인

리눅스 VM Disk 증설 후 Partition 확장 및 LV 확장

연결된 디스크의 확장이 가능한 가상화 환경의 경우 디스크 사이즈를 증설할 수 있지만 OS에서 증설된 만큼 파티션과 볼륨을 확장해야 실제 파일시스템에서 사용할 수 있습니다.
그 과정을 정리했습니다.

0. 파일시스템 상태 확인

test@test:~$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              794M   14M  781M   2% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  9.8G  8.2G  1.1G  89% /
tmpfs                              3.9G   84K  3.9G   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          1.7G  242M  1.4G  15% /boot
tmpfs                              794M  4.0K  794M   1% /run/user/1000
  1. VM의 디스크 증설 후 확인
    디스크를 기존 16G에서 30G로 증설 하여 sda는 30G 이지만 실제 확장되어야할 sda3는 현재 14.2G 상태
test@test:~$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  63.4M  1 loop /snap/core20/1974
loop1                       7:1    0  63.7M  1 loop /snap/core20/2434
loop2                       7:2    0 111.9M  1 loop /snap/lxd/24322
loop3                       7:3    0  89.4M  1 loop /snap/lxd/31333
loop4                       7:4    0  53.3M  1 loop /snap/snapd/19457
loop5                       7:5    0  44.3M  1 loop /snap/snapd/23258
sda                         8:0    0    30G  0 disk
├─sda1                      8:1    0     1M  0 part
├─sda2                      8:2    0   1.8G  0 part /boot
└─sda3                      8:3    0  14.2G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0    10G  0 lvm  /
sdb                         8:16   0    50G  0 disk
sr0                        11:0    1  1024M  0 rom

2. 파티션 확장

test@test:~$ sudo parted
GNU Parted 3.4
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  1881MB  1879MB  ext4
 3      1881MB  17.2GB  15.3GB

(parted) resizepart 3
End?  [17.2GB]? 32.2GB
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB                     bios_grub
 2      2097kB  1881MB  1879MB  ext4
 3      1881MB  32.2GB  30.3GB

(parted) q
Information: You may need to update /etc/fstab.

3. 파티션 확장 확인

test@test:~$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  63.4M  1 loop /snap/core20/1974
loop1                       7:1    0  63.7M  1 loop /snap/core20/2434
loop2                       7:2    0 111.9M  1 loop /snap/lxd/24322
loop3                       7:3    0  89.4M  1 loop /snap/lxd/31333
loop4                       7:4    0  53.3M  1 loop /snap/snapd/19457
loop5                       7:5    0  44.3M  1 loop /snap/snapd/23258
sda                         8:0    0    30G  0 disk
├─sda1                      8:1    0     1M  0 part
├─sda2                      8:2    0   1.8G  0 part /boot
└─sda3                      8:3    0  28.2G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0    10G  0 lvm  /
sdb                         8:16   0    50G  0 disk
sr0                        11:0    1  1024M  0 rom

4. pv 사이즈 확인 및 확장

test@test:~$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ubuntu-vg
  PV Size               <14.25 GiB / not usable 0
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              3647
  Free PE               1087
  Allocated PE          2560
  PV UUID               O2p8iY-2Jpm-WNGJ-viUf-nIt6-iw0x-rVgXAo

test@test:~$ sudo pvscan
  PV /dev/sda3   VG ubuntu-vg       lvm2 [<14.25 GiB / <4.25 GiB free]
  Total: 1 [<14.25 GiB] / in use: 1 [<14.25 GiB] / in no VG: 0 [0   ]

test@test:~$ sudo pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
test@test:~$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ubuntu-vg
  PV Size               <28.24 GiB / not usable 1.31 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              7228
  Free PE               4668
  Allocated PE          2560
  PV UUID               O2p8iY-2Jpm-WNGJ-viUf-nIt6-iw0x-rVgXAo

5. vg 미할당량 확인 및 lv 확장

test@test:~$ sudo vgdisplay
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               28.23 GiB
  PE Size               4.00 MiB
  Total PE              7228
  Alloc PE / Size       2560 / 10.00 GiB
  Free  PE / Size       4668 / 18.23 GiB
  VG UUID               aUI3qM-tbml-FpOz-ccxw-1yk3-4hCo-a35uCK

test@test:~$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                gFcvA9-fkuH-rNy8-wVka-93Th-r8X0-FB8giN
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2023-12-05 01:04:17 +0000
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

test@test:~$ sudo lvextend -l +100%FREE -n /dev/ubuntu-vg/ubuntu-lv
  Size of logical volume ubuntu-vg/ubuntu-lv changed from 10.00 GiB (2560 extents) to 28.23 GiB (7228 extents).
  Logical volume ubuntu-vg/ubuntu-lv successfully resized.
test@test:~$ sudo vgdisplay
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               28.23 GiB
  PE Size               4.00 MiB
  Total PE              7228
  Alloc PE / Size       7228 / 28.23 GiB
  Free  PE / Size       0 / 0
  VG UUID               aUI3qM-tbml-FpOz-ccxw-1yk3-4hCo-a35uCK

test@test:~$ lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0  63.4M  1 loop /snap/core20/1974
loop1                       7:1    0  63.7M  1 loop /snap/core20/2434
loop2                       7:2    0 111.9M  1 loop /snap/lxd/24322
loop3                       7:3    0  89.4M  1 loop /snap/lxd/31333
loop4                       7:4    0  53.3M  1 loop /snap/snapd/19457
loop5                       7:5    0  44.3M  1 loop /snap/snapd/23258
sda                         8:0    0    30G  0 disk
├─sda1                      8:1    0     1M  0 part
├─sda2                      8:2    0   1.8G  0 part /boot
└─sda3                      8:3    0  28.2G  0 part
  └─ubuntu--vg-ubuntu--lv 253:0    0  28.2G  0 lvm  /
sdb                         8:16   0    50G  0 disk
sr0                        11:0    1  1024M  0 rom

6. 파일시스템 사이즈 재조정 및 확인

test@test:~$ sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 4
The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 7401472 (4k) blocks long.

test@test:~$ df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              794M   14M  781M   2% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   28G  8.2G   19G  31% /
tmpfs                              3.9G   84K  3.9G   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          1.7G  242M  1.4G  15% /boot
tmpfs                              794M  4.0K  794M   1% /run/user/1000