Allow
필수 경로 확인
워커 노드가 컨트롤 플레인 포트, DNS 엔드포인트, 웹훅, 외부 서비스에 계속 닿을 수 있는지 확인합니다.
Kubernetes를 위한 GitOps 핑 체크
각 Kubernetes 노드에서
외부 IP와 포트 보안 필터를 확인합니다.
원하는 연결 상태는 Git에 적어둡니다.
각 노드의 agent가 TCP와 UDP를 직접 확인하고, 결과는 알림으로 받습니다.

Git으로 관리
허용할 연결과 막아야 할 연결을 별도 UI가 아니라 Git에 적어둡니다.
노드에서 직접 확인
각 노드의 agent가 직접 체크하므로, 그 노드에서 실제로 도달 가능한지 알 수 있습니다.
쉽게 쓰고 쉽게 제거
설치해서 보안 필터를 확인하고, 알림을 본 뒤 필요가 끝나면 바로 지우면 됩니다.
만든 이유
Pingpongkong은 하는 일이 작고 분명합니다. 열려 있어야 하는 경로는 열려 있는지, 막혀 있어야 하는 경로는 정말 막혀 있는지 확인합니다. 방화벽, Cilium, 노드 라벨, 클라우드 보안 그룹을 바꾼 뒤 확인할 때 특히 좋습니다.
Allow
워커 노드가 컨트롤 플레인 포트, DNS 엔드포인트, 웹훅, 외부 서비스에 계속 닿을 수 있는지 확인합니다.
Deny
deny 규칙은 대상에 닿지 않아야 정상입니다. 필터 설정이 새면 실패로 바로 드러납니다.
GitOps
collector가 private state repo를 읽고, 원하는 상태를 Kubernetes ConfigMap으로 올립니다.
사용 방법
운영은 Git과 알림으로 충분합니다. 현재 UI는 없고, 이 용도에는 굳이 필요하지 않다고 보고 있습니다.
https://github.com/pingpongkong/pingpongkong-state 를 내 private repo로 복제합니다. k8s/와 notification/을 수정하면 됩니다. 기본 예시는 Cilium과 Discord입니다.
클러스터에 맞게 연결 규칙을 고칩니다. allow와 deny 체크를 Git에서 리뷰할 수 있게 두면 됩니다.
배포 토큰은 읽기 권한만 있으면 됩니다. collector는 private state repo를 가져오기만 합니다.
노드에 라벨을 붙이고 Helm 값을 설정한 뒤 설치합니다. collector와 agent가 데이터를 만들 때까지 잠시 기다립니다.
Discord나 설정한 알림 채널을 확인합니다. 한 번만 점검하려는 목적이었다면 확인이 끝난 뒤 지우면 됩니다.
런타임 구조
collector는 Git에서 연결 규칙과 알림 설정을 계속 가져옵니다. agent는 자기 노드에 필요한 체크만 골라 정해진 주기로 TCP 또는 UDP probe를 실행합니다.
collector
k8s/<cluster>.yaml과 notification/*.yaml을 읽고 검증합니다. 문제가 없으면 pingpongkong-{cluster}-ping-state ConfigMap을 만들고 알림을 보냅니다.
agent
desiredPingState.yaml을 watch합니다. 노드 라벨과 대상 InternalIP를 해석한 뒤, 현재 노드에 필요한 체크만 실행합니다.
report
agent는 /node-status와 /metrics를 제공합니다. collector는 /healthz, /readyz, /report로 최신 클러스터 상태를 보여줍니다.
설치 경로
지금 바로 쓸 수 있는 것은 Kubernetes 탭입니다. Binary 탭은 나중에 만들 수 있는 bare-metal 및 legacy app용 node/ 기반 경로입니다.
현재는 이 경로를 사용합니다. private state repo를 준비하고 read-only 토큰을 만든 뒤, 노드 라벨과 Helm 값을 설정해서 설치합니다. 이후 report 데이터가 들어오길 기다리면 됩니다.
Helm 설치
helm install ppk oci://registry-1.docker.io/kimc1992/pingpongkong \ --namespace pingpongkong --create-namespace \ --history-max 2 \ --set CONFIG_GIT_TOKEN="{{깃토큰}}" \ --set CONFIG_GIT_CLUSTERNAME="{{깃에 있는 쿠버네티스 클러스터 명칭 경로}}" \ --set CONFIG_GIT_URL="{{깃 주소}}"아래 값은 필요할 때만 추가합니다. 추가하려면 CONFIG_GIT_URL 줄 끝에 \를 붙이고 이어서 선언하세요. 생략하면 chart 기본값을 사용합니다.
--set LOG_LEVEL=INFO \--set COLLECTOR_UPDATE_INTERVAL=5m \--set AGENT_CHECK_INTERVAL=5m \--set AGENT_API_PORT=8080 \--set COLLECTOR_API_PORT=8081아직 만든 버전은 아닙니다. 시간이 되면 legacy app과 Kubernetes 밖의 서버에서도 쓸 수 있는 node/ 기반 binary 버전을 만들 생각입니다.
나중에 추가할 경로
binary 버전은 아직 실행 가능한 문서나 패키지가 없습니다. 지금은 Kubernetes 탭을 사용하세요.
Kubernetes DaemonSet 방식이 맞지 않는 bare-metal 서버, legacy app, 일반 서버 환경을 생각하고 있습니다.
binary 버전이 만들어지면 node/ 기반 설정을 사용할 예정입니다.
아직 계획 단계입니다. 현재 구현된 것은 Kubernetes 버전입니다.
알림이 UI
Pingpongkong은 설정한 곳으로 리포트를 보냅니다. 알림만 봐도 클러스터가 Healthy, Degraded, Unreachable 중 어디에 있는지 알 수 있고, 알림 채널별 rate limit도 따로 적용됩니다.
notification/discord.yaml과 webhook 환경 변수로 바로 시작할 수 있습니다.
collector에는 Discord, Teams, email, Telegram, SMS 알림 채널이 준비되어 있습니다.
Git 동기화가 실패하면 마지막으로 정상 반영된 알림 설정으로 실패 사실을 알려줍니다.
동작이 이상하면 Pingpongkong GitHub에 issue를 남겨주세요.
Pingpongkong은 원하는 상태를 Git에 두고, 트래픽이 시작되는 노드에서 직접 probe를 실행한 뒤, 결과를 알림으로 보냅니다.