네트워크
네트워크 캔버스
"네트워크" 탭은 EC2/Lambda/로드밸런서/DB를 드래그해서 배치하고 선(엣지)으로 연결하는 시각적 방화벽 관리 도구입니다. 엣지 하나 = NetworkPolicy 오브젝트 하나(포트 범위 + 방향 지정 가능).
왼쪽 패널: 맨 위 + 로드밸런서 추가(캔버스에 새로 만듦), 그 아래 EC2 / Lambda / DB 칸이 따로 있고 칸마다 아직 캔버스에 없는 내 리소스와 + 추가 버튼. 좁은 화면의 목록 보기도 같은 구성입니다.
DB 연결 (EC2 → DB)
내가 만든 DB도 캔버스에 올릴 수 있습니다. DB 노드는 점선 테두리에 "외부 접근 불가" 표시.
-
DB는 인터넷에서 절대 접근할 수 없음 — 도메인/인바운드, 로드밸런서 멤버, 인터넷 설정이 없고, DB에서 나가는 연결도 못 만듦
-
EC2의 ●를 DB로 끌어 이으면 그 EC2만 그 DB의 서버(PostgreSQL 5432 / MySQL 3306 / Redis 6379)에 접속 가능 — 포트를 묻지 않고 바로 연결됨 (점선 화살표). DB 노드에 종류가 표시됨
-
이은 순간 그 EC2 안에
~/.yws/databases/DB이름.env파일이 생김 (DATABASE_URL과 종류별 변수 — PostgreSQLPG*, MySQLMYSQL_*, RedisREDIS_URL·REDISCLI_AUTH, 권한 600):set -a; . ~/.yws/databases/my_db.env; set +a psql # PostgreSQL (sudo apt install postgresql-client) redis-cli -u "$REDIS_URL" # Redis (sudo apt install redis-tools) python app.py # 앱은 os.environ["DATABASE_URL"]만 읽으면 됨 -
연결선을 누르면 "접속 정보 다시 쓰기"(EC2가 꺼져 있을 때 이었거나 파일을 지웠을 때) / "연결 끊기"
-
DB 비밀번호를 재발급하면 이어진 EC2들의 파일도 자동 갱신. 연결을 끊거나 EC2/DB/네트워크를 지우면 접속이 다시 막히고 파일도 지워짐
-
Lambda는 이을 필요 없이 바로 접속 가능 (그래서 Lambda → DB 선은 만들지 않음)
-
주의: 파일에 비밀번호가 들어 있어서, 그 EC2를 공유받은 사람도 읽을 수 있음
-
구현: 선마다 정책을 만들지 않고, DB 서버마다 "그 종류의 DB로 선이 이어진 EC2 전체"로
db네임스페이스의network-db-access-<종류>정책 하나를 매번 다시 씀 (app/db_links.py,provisioning.sync_db_access_policy). 이어진 EC2가 하나도 없으면 정책 자체를 지움 — 빈 허용 목록이 "전부 허용"으로 뒤집히는 NetworkPolicy 함정 때문. DB마다의 격리는 네트워크가 아니라 DB 계정·비밀번호가 담당 (같은 서버의 다른 DB는 접속 권한 자체가 없음)
NetworkPolicy 모델 (3단 구조)
- 기본 정책 (EC2 생성 시 자동 부여): 인바운드는 집 LAN에서 오는 SSH(2222)만 허용, 아웃바운드는 기본 전체 허용
- 인바운드 정책: 도메인 연결(도메인 / 인바운드 참고)로 Traefik이 그 EC2에 닿을 수 있게 해주는 정책, 활성 포트가 바뀔 때마다 통째로 재생성
- 엣지 정책: 네트워크 캔버스에서 그은 선 하나당 하나, 다른 EC2/로드밸런서 pod를 선택자로 지정
이 세 종류는 전부 같은 pod에 누적 적용됩니다 (k8s NetworkPolicy는 여러 개 붙어도 OR로 합쳐짐).
로드밸런서 — Pod 재시작 없는 멤버 관리
로드밸런서에 EC2를 넣고 빼는 건 원래 "멤버 공용 라벨을 Pod 템플릿에 패치"하는 방식이었는데, 이러면 Deployment 템플릿이 바뀌어서 멤버가 바뀔 때마다 그 EC2의 Pod가 강제로 재시작됐습니다 (수동으로 켠 프로세스가 죽는 부작용 실제 발견).
지금은 selector 없는 Service + 직접 관리하는 Endpoints 방식으로 바꿔서, 멤버 추가/제거가 Pod를 전혀 건드리지 않습니다. 대신 k8s가 자동으로 해주던 Endpoint 정합성 관리를 포털이 직접 책임져야 해서, 30초마다 도는 백그라운드 리컨사일 잡이 멤버들의 실제 Pod IP를 다시 확인해서 동기화합니다.