자체 TLS 인증서 사용

이 페이지에서는 관리형 TLS 인증서 기능을 사용하지 않는 경우에 자체 SSL/TLS 인증서를 사용하도록 Cloud Run for Anthos를 설정하는 방법을 설명합니다.

Istio 인그레스 게이트웨이는 인증서를 Kubernetes 보안 비밀에 저장하고 Istio 인그레스 게이트웨이 사양에 지정한 후에 인증서에서 제공되는 TLS 프로토콜을 지원할 수 있습니다.

시작하기 전에

이 안내에서는 자체 TLS 인증서가 이미 있다고 가정합니다.

TLS 인증서/비공개 키를 Kubernetes 보안 비밀로 저장하기

인증서를 보안 비밀로 저장하려면 다음 안내를 따르세요.

  1. 인증서를 현재 디렉터리에 복사합니다.

  2. 다음 명령어를 사용하여 인증서를 저장하는 보안 비밀을 만듭니다. 여기서 privkey.pem에는 인증서 비공개 키가 포함되고 fullchain.pem에는 공개 인증서가 포함됩니다.

    kubectl create --namespace gke-system secret tls SECRET_NAME \
      --key privkey.pem \
      --cert fullchain.pem

TLS 인증서를 Istio 인그레스 게이트웨이로 지정

TLS 인증서가 포함된 Kubernetes 보안 비밀을 사용하도록 Istio 인그레스 게이트웨이 사양을 수정합니다.

  1. 수정할 공유 게이트웨이 사양을 엽니다.

    kubectl edit gateway gke-system-gateway --namespace knative-serving
  2. 다음 섹션을 게이트웨이 사양에 추가하여 이전에 만든 보안 비밀을 사용하여 TLS 인증서를 지정합니다.

    - hosts:
      - "*"
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: SECRET_NAME
    

    게이트웨이 사양은 다음과 같이 표시됩니다.

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    spec:
      selector:
        istio: ingressgateway
      servers:
        - hosts:
          - "*"
          port:
            name: http
            number: 80
            protocol: HTTP
        - hosts:
          - "*"
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            mode: SIMPLE
            credentialName: SECRET_NAME
    

    서로 다른 네임스페이스의 두 가지 서비스에 여러 TLS 인증서를 추가하는 경우 게이트웨이 사양은 다음과 같습니다.

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - "*"
        port:
          name: http
          number: 80
          protocol: HTTP
      - port:
          number: 443
          name: https-SERVICE1_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET1_NAME
        hosts:
        - SERVICE1_NAME.NAMESPACE1.example.com
      - port:
          number: 443
          name: https-SERVICE2_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET2_NAME
        hosts:
        - SERVICE2_NAME.NAMESPACE2.example.com
    
  3. 변경사항을 저장합니다.

이 변경이 적용되면 HTTPS 프로토콜을 사용하여 배포된 서비스에 액세스할 수 있습니다.