Kubernetes LoadBalancer에 TSL을 추가하는 동시에 컨테이너로 수명이 긴 TCP 연결 전달도 지원합니다. (Adding TSL to a Kubernetes LoadBalancer while also supporting forwarding a long lived TCP connection to a container)


문제 설명

Kubernetes LoadBalancer에 TSL을 추가하는 동시에 컨테이너로 수명이 긴 TCP 연결 전달도 지원합니다. (Adding TSL to a Kubernetes LoadBalancer while also supporting forwarding a long lived TCP connection to a container)

백엔드 서비스를 GKE에 배포해야 합니다. 이 백엔드 서비스는 REST API와 여러 IoT 장치에서 사용할 TCP 서버로 구성됩니다. Google Kubernetes Engine 문서의 자습서에 따라 이를 달성하는 다음 서비스를 배포할 수 있었습니다.

apiVersion: v1
kind: Service
    metadata:
      name: my‑service
    spec:
      type: LoadBalancer
      selector:
        app: my‑backend‑app
      ports:
      ‑ name: http
        protocol: TCP
        port: 80
        targetPort: 8080
      ‑ name: https
        protocol: TCP
        port: 443
        targetPort: 8080
      ‑ name: my‑tcp‑service
        protocol: TCP
        port: 2222
        targetPort: 2222

위 구성의 문제는 REST API에 대해 TSL을 설정할 수 없다는 것입니다. Kubernetes에서 TSL을 설정하기 위해 찾은 모든 리소스는 Ingress를 가리키며 시도하는 동안 Ingress가 일종의 HTTP 프록시이므로(이해하는 한) 내 TCP 서버에서 Ingress가 작동하지 않는다는 것을 발견했습니다.

Ingress 없이 LoadBalancer에서 직접 TSL(HTTPS)을 설정할 수 있는 방법이 있습니까(Google 관리 인증서가 선호됨)? REST API에는 Ingress를, TCP 서버에는 다른 것을 사용해야 합니까?


참조 솔루션

방법 1:

Service type LoadBalancer is strictly a layer 4 service, thus it is impossible to have SSL termiantion happen on the LB. Traffic will be forwarded to your pods and SSL termination will need to occur there. Either that or you will need to have a proxy receive traffic and terminate TLS before forwarding the traffic to your application.

The ingress is currently the only option to use for Google‑managed certificates. You are correct that it uses HTTP proxy to terminate the requests. If you can arrange to have all requests come using different URLs, you could use a single Ingress, even for the TCP service (the front end would still be 443, but you can forward requests to port 2222).

The best option, though, would be to use the Ingress w/ managed certs for the HTTP(S) services and use the LoadBalancer service for the TCP service.

(by RaphaelPatrick W)

참조 문서

  1. Adding TSL to a Kubernetes LoadBalancer while also supporting forwarding a long lived TCP connection to a container (CC BY‑SA 2.5/3.0/4.0)

#google-cloud-platform #google-kubernetes-engine #kubernetes






관련 질문

Google API용 Android 키 사용 제한 (Restricting usage for an Android key for a Google API)

GCS 버킷에서 큰 폴더를 삭제하는 빠른 방법 (Fast way to delete big folder on GCS bucket)

Terraform 코드와 충돌하는 "소유자"에 의한 GCP 콘솔/클라우드 셸 변경을 어떻게 방지할 수 있습니까? (How can you prevent GCP console/cloud shell changes by "Owners" conflicting with the terraform code?)

서비스 계정으로 인증할 때 project_id를 명시적으로 설정하는 것을 피할 수 있습니까? (Is it possible to avoid setting project_id explicitly when authing with service account?)

Wordpress가 새 PHP 버전을 감지하지 못합니다 (Wordpress doesn't detect new php version)

카운터를 사용하여 테이블에 삽입된 레코드 수를 계산하고 python 스크립트를 사용하여 실행되는 각 작업에서 삽입된 레코드 수를 인쇄하는 방법 (How to count number of inserted records in table using counter and print the count of inserted record in each job run using python script)

Google Cloud 자연어 가져오기 오류 (Google Cloud Natural Language Import Error)

gcloud는 전체 컨테이너를 다시 빌드하지만 Dockerfile은 동일하고 스크립트만 변경됨 (gcloud rebuilds complete container but Dockerfile is the same, only the script has changed)

GCP를 통한 Kubernetes 대시보드 (Kubernetes dashboard via GCP)

Firebase 실시간 데이터베이스 키 없이 하위 레코드를 얻는 방법 (Firebase realtime database how to get a child record without the key)

Google Cloud Function / MongoDB VM 인스턴스 통신 (Google Cloud Function / MongoDB VM instance communication)

Google Artifact Registry에서 도커 풀 수를 추적할 수 있습니까? (Is it possible track the number of docker pulls in Google Artifact Registry?)







코멘트