HTTPS 인그레스 설정

간단한 TLS를 HTTPS로 인그레스 게이트웨이를 보호하고 특정 웹페이지에 대해 HTTPS 연결을 사용 설정할 수 있습니다. 또한 HTTP 연결을 HTTPS로 리디렉션할 수 있습니다.

HTTPS는 비보안 네트워크로 보안 채널을 만들어 중간자 공격으로부터 보호하고 클라이언트 및 서버 간 트래픽을 암호화합니다. 웹 서버가 HTTPS 연결을 수락하도록 준비하려면 관리자가 서버에 대해 공개 키 인증서를 만들어야 합니다. 웹브라우저가 이 인증서를 경고 없이 수락할 수 있으려면 신뢰할 수 있는 인증 기관의 서명이 있어야 합니다.

기본 제공되는 Kubernetes 편집기를 사용하여 kf 네임스페이스에서 external-gateway라는 게이트웨이를 수정합니다.

kubectl edit gateway -n kf external-gateway
  1. 서비스에 대한 인증서 및 키가 있다고 가정하고 인그레스 게이트웨이를 위해 Kubernetes 보안 비밀을 만듭니다. 보안 비밀 이름은 istio 또는 prometheus로 시작하지 않아야 합니다. 이 예시에서 보안 비밀 이름은 myapp-https-credential입니다.
  2. servers: 아래에서 다음 안내를 따르세요.
    1. 포트 443에 대한 섹션을 추가합니다.
    2. tls: 아래에서 credentialName을 방금 만든 보안 비밀의 이름으로 설정합니다.
    3. hosts: 아래에서 HTTPS로 보호하려는 서비스의 호스트 이름을 추가합니다. 와일드 카드(예: *.example.com)를 사용하여 전체 도메인으로 설정하거나 단일 호스트 이름(예: myapp.example.com)으로 범위를 지정할 수 있습니다.
  3. servers: 아래에 포트 80 HTTP에 대한 섹션이 있습니다. 모든 트래픽이 HTTP로 수신되도록 하려면 게이트웨이 정의에 이 섹션을 유지합니다.
  4. HTTP를 HTTPS로 리디렉션하려면 HTTP 서버 섹션의 tls 아래에 httpsRedirect: true 값을 추가합니다. 자세한 내용은 Istio 게이트웨이 문서를 참조하세요. hosts*로 설정된 섹션에서 이 값을 추가하면 모든 트래픽이 HTTPS로 리디렉션됩니다. 단일 앱/도메인에 대해서만 HTTP를 HTTPS로 리디렉션하려면 리디렉션을 지정하는 개별 HTTP 섹션을 추가합니다.

다음은 myapp.example.com 에 대해 HTTPS를 설정하고 해당 호스트에 대해 HTTP를 HTTPS로 리디렉션하는 게이트웨이 spec 예시입니다.

spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - myapp.example.com
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      credentialName: myapp-https-credential
      mode: SIMPLE
  - hosts:
    - myapp.example.com
    port:
      name: http-my-app
      number: 80
      protocol: HTTP
    tls:
      httpsRedirect: true
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP