RedHat OpenShift 플랫폼 사용하기 - 네트워킹

이eun·2025년 3월 10일

Red Hat OpenShift의 네트워킹(Networking) 구조는 Kubernetes 네트워크 모델을 기반으로 하며, 내부 통신과 외부 트래픽 관리가 중요한 역할을 해. OpenShift는 기본적으로 Software-Defined Networking(SDN) 방식을 사용하며, 클러스터 내부와 외부의 워크로드를 안전하게 연결하는 다양한 네트워크 리소스를 제공해.


1. OpenShift 네트워크 구조

OpenShift 네트워크는 크게 Pod 네트워크, 서비스 네트워크, Ingress/Egress 네트워크로 나뉘어.

네트워크 종류설명
Pod 네트워크Pod 간 통신을 담당하는 네트워크
Service 네트워크Pod를 그룹화하고 서비스 간 통신을 관리
Ingress 네트워크외부에서 OpenShift 내부로 들어오는 트래픽 제어
Egress 네트워크OpenShift 내부에서 외부로 나가는 트래픽 관리

2. 주요 네트워크 구성 요소

1) Pod 네트워크

  • OpenShift의 Pod 네트워크는 기본적으로 모든 Pod가 서로 통신 가능하도록 설정됨.
  • 기본적으로 OpenShift SDN(CNI 플러그인)이나 다른 네트워크 플러그인(OVN-Kubernetes 등)을 사용.
  • 각 Pod에는 고유한 IP 주소가 할당되며, Pod 간 직접 통신 가능.
  • 하지만 Pod의 IP는 변할 수 있기 때문에, 서비스(Service)를 통해 안정적으로 접근해야 함.

📌 Pod 네트워크 확인 명령어

oc get pods -o wide

실행하면 각 Pod의 IP 및 실행 중인 노드를 확인할 수 있어.


2) 서비스 네트워크 (ClusterIP, NodePort, LoadBalancer)

Pod는 IP가 변할 수 있기 때문에, 안정적인 접근을 위해 Service를 사용해 네트워크를 관리해야 해.
OpenShift의 Service에는 여러 가지 유형이 있어.

서비스 타입설명
ClusterIP (기본값)내부에서만 접근 가능 (외부에서 직접 접근 불가)
NodePort클러스터 외부에서 특정 포트를 통해 접근 가능
LoadBalancer클라우드 환경에서 로드 밸런서를 통해 외부 접근 허용
ExternalNameDNS 엔트리를 통해 외부 서비스와 연결

📌 서비스 확인 명령어

oc get svc

📌 특정 서비스 상세 보기

oc describe svc <서비스명>

3) Ingress & Route (외부 트래픽 처리)

OpenShift에서 외부 트래픽을 클러스터 내부로 전달하려면 Ingress 또는 Route를 사용해야 해.

  • Ingress: Kubernetes 기본 네트워크 리소스. Nginx, HAProxy 등의 컨트롤러를 사용.
  • Route: OpenShift 고유의 기능으로, oc create route 명령어로 생성 가능.

📌 기본적인 Route 생성 방식

oc expose svc <서비스명> --name=<라우트명> --hostname=<도메인>

📌 Route 확인 명령어

oc get routes

4) Egress (외부로 나가는 트래픽)

  • Pod가 외부로 나갈 때, 기본적으로 NAT(Network Address Translation)를 통해 나가게 됨.
  • 특정 외부 서비스로만 트래픽을 제한하려면 EgressNetworkPolicy를 설정해야 함.

📌 Egress 정책 예제 (특정 도메인만 허용)

apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
  name: allow-specific
  namespace: my-namespace
spec:
  egress:
  - type: Allow
    to:
      dnsName: "example.com"
  - type: Deny
    to:
      cidrSelector: "0.0.0.0/0"

이 설정을 하면 example.com을 제외한 모든 외부 네트워크 접속이 차단됨.


3. OpenShift 네트워크 정책(NetworkPolicy)

OpenShift에서는 NetworkPolicy를 활용하여 특정 Pod 간의 통신을 제어할 수 있어.
기본적으로 OpenShift에서는 모든 Pod 간 통신이 가능하지만, 보안 강화를 위해 NetworkPolicy를 적용할 수 있어.

📌 예제: 특정 네임스페이스 내에서만 Pod 통신 허용

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-namespace
  namespace: my-namespace
spec:
  podSelector:
    matchLabels:
      role: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend

👉 frontend 라벨이 붙은 Pod만 backend Pod와 통신할 수 있도록 설정.

📌 네트워크 정책 확인 명령어

oc get networkpolicy

4. OpenShift SDN vs OVN-Kubernetes

OpenShift에서는 기본적으로 SDN(Software-Defined Networking)을 사용하지만, 클러스터의 네트워크 플러그인을 선택할 수도 있어.

네트워크 플러그인설명
OpenShift SDN (기본값)OpenShift 기본 SDN, 간단한 네트워크 구성을 제공
OVN-Kubernetes네트워크 격리 및 정책 적용이 강화된 네트워크 플러그인
Calico / Cilium서드파티 네트워크 플러그인 (더 강력한 보안 및 성능)

📌 현재 네트워크 플러그인 확인

oc get networks.operator.openshift.io -o yaml

📌 정리

  1. Pod 네트워크: 모든 Pod는 기본적으로 서로 통신 가능 (IP 자동 할당)
  2. Service 네트워크: ClusterIP, NodePort, LoadBalancer 타입을 사용하여 네트워크 관리
  3. Ingress & Route: 외부 트래픽을 내부 서비스로 라우팅
  4. Egress 관리: 특정 외부 도메인/서비스만 허용 가능 (EgressNetworkPolicy)
  5. NetworkPolicy: Pod 간 네트워크 통신을 제어하여 보안 강화
  6. SDN & OVN-Kubernetes: OpenShift의 기본 네트워크 플러그인

0개의 댓글