设置 HTTPS 入站流量

您可以使用简单的传输层安全协议 (TLS) 通过 HTTPS 保护入站流量网关,并启用与特定网页的 HTTPS 连接。此外,您还可以将 HTTP 连接重定向到 HTTPS。

HTTPS 通过不安全的网络创建安全信道,从而防范中间人攻击并对客户端与服务器之间的流量进行加密。为了准备网络服务器以接受 HTTPS 连接,管理员必须为该服务器创建公钥证书。此证书必须由受信任的证书授权机构签署,以便网络浏览器接受它,而不显示警告。

使用内置的 Kubernetes 编辑器在 kf 命名空间中修改名为 external-gateway 的网关:

kubectl edit gateway -n kf external-gateway
  1. 假定您的服务具有证书和密钥,请为入站流量网关创建 Kubernetes Secret。确保 Secret 名称没有以 istioprometheus 开头。在此示例中,Secret 名为 myapp-https-credential
  2. servers:
    1. 为端口 443 添加一个部分。
    2. tls: 下,将 credentialName 设置为您刚刚创建的 Secret 的名称。
    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 部分。

以下是网关 spec 的示例,该网关为 myapp.example.com 设置了 HTTPS 并针对该主机将 HTTP 重定向到 HTTPS:

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