kubernetes - 使用 Istio 时如何正确地 HTTPS 保护应用程序?
问题描述
我目前正试图围绕 kubernetes 应用程序与 Istio 结合的典型应用程序流程的外观。
因此,对于我的应用程序,我在 Kubernetes 集群中托管了一个 asp.net 应用程序,并在顶部添加了 Istio。这是我的网关和虚拟服务:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: appgateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
tls:
httpsRedirect: true
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
privateKey: /etc/istio/ingressgateway-certs/tls.key
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: appvservice
spec:
hosts:
- "*"
gateways:
- appgateway
tls:
- match:
- port: 443
sniHosts:
- "*"
route:
- destination:
host: frontendservice.default.svc.cluster.local
port:
number: 443
这是我在阅读 Istio 文档后得出的结论。
请注意,myfrontendservice
是一个非常基本的 ClusterIP 服务路由到 Asp.Net 应用程序,该应用程序还提供标准的 80 / 443 端口。
我现在有几个问题:
- 这是保护我的应用程序的正确方法吗?本质上,我想将端口 80 上的传入流量直接重定向到边缘启用 https 的 443。但是,当我尝试这个时,端口 80 上根本没有重定向。
- 此外,我的 VirtualService 上的 tls 路由不起作用。我的 pod 上没有流量
- 我还想知道,是否有必要手动将 HTTPs 添加到我的内部应用程序中,或者这是 Istios 内部 CA 功能的来源?
我想象它会像这样工作:
- 请求进来。如果它在端口 80 上,则向客户端发送重定向以发送 https 请求。如果它在端口 443 上,则允许该请求。
- VirtualService 提供了关于端口 443 上的请求应该发生什么的指令,并将其转发给服务。
- 该服务现在将请求转发到我的应用程序的 443 端口。
在此先感谢 - 我刚刚学习 Istio,我有点困惑为什么我看似正确的设置在这里不起作用。
解决方案
您的网关终止 TLS 连接,但您的 VirtualService 配置为接受带有 TLSRoute的未终止的 TLS 连接。
比较没有 TLS 终止的示例和终止 TLS的示例。最有可能的是,“默认”设置是终止 TLS 连接并使用HTTPRoute配置 VirtualService 。
推荐阅读
- java - how to calculate Euclidean distance between vectors of two INDArrays in ND4J?
- javascript - puppeteer 抛出错误“UnhandledPromiseRejectionWarning”并崩溃
- npm - NPM 安装只创建一个 package-lock.json?
- discord.js - discord.js 不在特定时间发送消息
- python - 在树莓派上使用 python 的 Web 服务器,无法从 LAN 或 Internet 访问
- php - 致命错误:未捕获的错误:找不到类“todo\views\DataBase”
- reactjs - Apollo useQuery 或 client.query React 无法记录值
- visual-studio-code - 我使用 Yeoman 创建了一个 VS Code 扩展。我使用的是哪个版本的 Electron?
- java - statement.executeQuery () 不起作用
- jquery - jQuery:特殊情况下窗口大小更改的更新功能