您可以使用简单的传输层安全协议 (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