1.8. 경로 및 진입
경로와 유입은 모두 애플리케이션을 외부 트래픽에 노출하는 데 사용됩니다. 그러나 그 목적은 약간 다르고, 기능도 다릅니다.
1.8.1. 라우트 링크 복사링크가 클립보드에 복사되었습니다!
경로는 외부 클라이언트가 이름을 통해 서비스에 도달할 수 있도록 호스트 이름에서 서비스를 노출하는 OpenShift Container Platform 리소스에 특화되어 있습니다.
경로는 호스트 이름을 서비스에 매핑합니다. 경로 이름 매핑을 통해 외부 클라이언트가 호스트 이름을 사용하여 서비스에 액세스할 수 있습니다. 경로는 서비스로 향하는 트래픽에 대한 부하 분산을 제공합니다. 경로에 사용된 호스트 이름은 라우터의 IP 주소로 확인됩니다. 그런 다음 경로는 트래픽을 적절한 서비스로 전달합니다. 클라이언트와 서비스 간 트래픽을 암호화하기 위해 SSL/TLS를 사용하여 경로를 보호할 수도 있습니다.
1.8.2. Ingress 링크 복사링크가 클립보드에 복사되었습니다!
Ingress는 부하 분산, SSL/TLS 종료, 이름 기반 가상 호스팅을 포함한 고급 라우팅 기능을 제공하는 리소스입니다. Ingress에 대한 몇 가지 주요 사항은 다음과 같습니다.
- HTTP/HTTPS 라우팅: Ingress를 사용하여 클러스터 내 서비스로 HTTP 및 HTTPS 트래픽을 라우팅하기 위한 규칙을 정의할 수 있습니다.
- 부하 분산: NGINX나 HAProxy와 같은 Ingress Controller는 사용자가 정의한 규칙에 따라 트래픽 라우팅과 부하 분산을 관리합니다.
- SSL/TLS 종료: SSL/TLS 종료는 백엔드 서비스로 전달하기 전에 들어오는 SSL/TLS 트래픽을 해독하는 프로세스입니다.
- 여러 도메인 및 경로: Ingress는 여러 도메인과 경로에 대한 트래픽 라우팅을 지원합니다.
1.8.3. 경로와 Ingress 비교 링크 복사링크가 클립보드에 복사되었습니다!
경로는 진입보다 더 많은 유연성과 고급 기능을 제공합니다. 이를 통해 복잡한 경로 시나리오에 적합한 경로가 만들어집니다. 특히 기본적인 외부 접근 요구 사항의 경우 경로를 설정하고 사용하는 것이 더 간단합니다. Ingress는 보다 간단하고 직접적인 외부 접근을 위해 자주 사용됩니다. 경로는 고급 라우팅과 SSL/TLS 종료가 필요한 보다 복잡한 시나리오에 사용됩니다.
1.8.4. 예: 웹 애플리케이션을 노출하기 위한 경로 및 인그레스 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에서 웹 애플리케이션이 실행되고 있습니다. 외부 사용자가 애플리케이션에 접근할 수 있도록 하려고 합니다. 애플리케이션은 특정 도메인 이름을 통해 접근할 수 있어야 하며, 트래픽은 TLS를 사용하여 안전하게 암호화되어야 합니다. 다음 예제에서는 웹 애플리케이션을 외부 트래픽에 안전하게 노출하기 위해 경로와 유입을 모두 구성하는 방법을 보여줍니다.
1.8.4.1. 경로 구성 링크 복사링크가 클립보드에 복사되었습니다!
새 프로젝트를 생성합니다.
$ oc new-project webapp-project웹 애플리케이션을 배포합니다.
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git --name=webapp경로를 사용하여 서비스를 노출합니다.
$ oc expose svc/webapp --hostname=webapp.example.comTLS를 사용하여 경로를 보호합니다.
인증서와 키를 사용하여 TLS 비밀번호를 생성합니다.
$ oc create secret tls webapp-tls --cert=path/to/tls.crt --key=path/to/tls.keyTLS 비밀번호를 사용하도록 경로를 업데이트합니다.
$ oc patch route/webapp -p '{"spec":{"tls":{"termination":"edge","certificate":"path/to/tls.crt","key":"path/to/tls.key"}}}'
1.8.4.2. 인그레스 구성 링크 복사링크가 클립보드에 복사되었습니다!
인그레스 리소스를 생성합니다.
클러스터에 Ingress Controller가 설치되어 실행 중인지 확인하세요.
웹 애플리케이션에 대한 서비스를 만듭니다. 아직 만들어지지 않았다면 애플리케이션을 서비스로 공개합니다.
apiVersion: v1 kind: Service metadata: name: webapp-service namespace: webapp-project spec: selector: app: webapp ports: - protocol: TCP port: 80 targetPort: 8080인그레스 리소스를 생성합니다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: webapp-ingress namespace: webapp-project annotations: kubernetes.io/ingress.class: "nginx" spec: rules: - host: webapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: webapp-service port: number: 80TLS를 사용하여 침투를 보호하세요.
인증서와 키를 사용하여 TLS 비밀번호를 생성합니다.
$ oc create secret tls webapp-tls --cert=path/to/tls.crt --key=path/to/tls.key -n webapp-projectTLS 비밀번호를 사용하도록 ingress 리소스를 업데이트합니다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: webapp-ingress namespace: webapp-project spec: tls:1 - hosts: - webapp.example.com secretName: webapp-tls2 rules: - host: webapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: webapp-service port: number: 80