개요

postgres와 같은 pod을 외부에 노출하기 위해 Ingress를 살펴보았는데 기본적으로 k8s Ingress가 TCP를 따로 지원하지 않았다.

따라서 ingress에서 TCP를 지원할수 있는 방법을 찾아 본 뒤 정리해둔다.

요약

ingress(TCP포트) -> k8s 서비스포트 -> pod 으로 만드는건데 TCP포트는 configmap을 통해 노출하는 것이다.

방법

아래와 같이 ingress-ngix configmap 을 편집하여 가능하다.

아래의 커맨드로 접속한다.

kubectl edit configmap tcp-services -n ingress-nginx

이후 data:라인부터 기재를 해준다.

명세의 뜻은 <ingress_expose_port>:"<namespace>/<svc_name>:<svc_port>"를 의미한다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  5044: "default/postgres-test1-svc:5044"

postgres에 사용한 서비스 명세는 아래와 같다.

apiVersion: v1
kind: Service
metadata:
name: postgres-test1-svc
labels:
app: postgres-test1
spec:
ports:
- port: 5432
targetPort: 5432
protocol: TCP
selector:
app: postgres-test1

검증

위와 같이 진행한 뒤 검증을 해보기로한다. 예제에서는 postgress pod에 접속하는 거라 sql pro를 이용하여 정상접속이 되는지 보고자 한다.

아래 그림과 같이 ingress_주소:5432로 접근 시 정상 접속이 됨을 알 수 있다.

Reference