【发布时间】:2021-04-26 10:00:06
【问题描述】:
我目前正在尝试了解 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 文档后得出的结论。
请注意,我的frontendservice 是一个非常基本的 ClusterIP 服务路由到一个 Asp.Net 应用程序,它还提供标准的 80 / 443 端口。
我现在有几个问题:
- 这是保护我的应用程序的正确方法吗?本质上,我想将端口 80 上的传入流量直接重定向到边缘启用 https 的 443。但是,当我尝试这个时,端口 80 上根本没有重定向。
- 另外,我的 VirtualService 上的 tls 路由不起作用。我的 pod 上没有流量
- 我还想知道,是否有必要手动将 HTTPs 添加到我的内部应用程序中,或者这是 Istios 内部 CA 功能的来源?
我想象它会这样工作:
- 请求进入。如果它在端口 80 上,则向客户端发送重定向以发送 https 请求。如果它在端口 443 上,则允许该请求。
- VirtualService 提供指令,说明在端口 443 上的请求应该发生什么,并将其转发给服务。
- 该服务现在将请求转发到我的应用的 443 端口。
提前致谢 - 我刚刚学习 Istio,我有点困惑为什么我看似正确的设置在这里不起作用。
【问题讨论】:
-
嗨@nugetminer23,1.你的istio版本是什么? 2.用
curl -v查看的响应码是什么? 3.您可以尝试将sniHosts从通配符(*) 更改为*.domain 吗?如果我正确理解documentation,单独的通配符可能不起作用。 4.你也可以试试http虚拟服务而不是tls吗? -
嘿@Jakub - 我现在在 1.6.3。今天下班后会尝试一下您的其他建议!
标签: kubernetes istio