您可以使用简单的传输层安全协议 (TLS) 通过 HTTPS 保护入站流量网关,并启用与特定网页的 HTTPS 连接。此外,您还可以将 HTTP 连接重定向到 HTTPS。
HTTPS 通过不安全的网络创建安全信道,从而防范中间人攻击并对客户端与服务器之间的流量进行加密。为了准备网络服务器以接受 HTTPS 连接,管理员必须为该服务器创建公钥证书。此证书必须由受信任的证书授权机构签署,以便网络浏览器接受它,而不显示警告。
使用内置的 Kubernetes 编辑器在 kf 命名空间中修改名为 external-gateway 的网关:
kubectl edit gateway -n kf external-gateway
- 假定您的服务具有证书和密钥,请为入站流量网关创建 Kubernetes Secret。确保 Secret 名称没有以 istio或prometheus开头。在此示例中,Secret 名为myapp-https-credential。
- 在 servers:下- 为端口 443 添加一个部分。
- 在 tls:下,将credentialName设置为您刚刚创建的 Secret 的名称。
- 在 hosts:下,添加您想使用 HTTPS 保护的服务的主机名。您可以使用通配符将此项设置为整个网域(例如*.example.com),也可以将其限定为一个主机名(例如myapp.example.com)。
 
- servers:下面应该已经有端口 80 HTTP 的部分。如果您希望所有流量都以 HTTP 格式传入,请在网关定义中保留此部分。
- 如需将 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