我正在尝试通过IstioHTTPS
->HTTP
.
HTTP
80工作良好
HTTPS
443只适用于/
路径
HTTP 200:
curl https://serviceA.example.com
HTTP 404:
curl https://serviceA.example.com/blabla
Istio访问日志:
GET /blabla HTTP/2" 404 NR route_not_found
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: serviceA-gateway
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: HTTP
protocol: HTTP
hosts:
- "serviceA.example.com"
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: serviceA.example.com
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: serviceA-swearl
namespace: default
spec:
hosts:
- serviceA.example.com
gateways:
- serviceA-gateway
HTTP:
- route:
- destination:
host: serviceA.default.svc.cluster.local
port:
number: 80
我不确定我做错了什么。通过查看文档,一切都应该正常。使用NLB在AWS EKS上安装ISTIO操作符
另外,我在istio-system命名空间中有一个证书- secret。Service和Deployment有需要的标签
修复:问题是我有在入口定义
pathType: ImplementationSpecific
应该是:
pathType: Prefix
配置入口路径类型实现特定行为#26883
社区维基答案,提高可见度
正如问题中提到的OP,通过设置
可以解决问题pathType: Prefix
在入口
原始消息:
修复:问题是我在入口定义
pathType: ImplementationSpecific
应该是pathType: Prefix
https://github.com/istio/istio/issues/26883
你可以在这个官方文档中找到解释:
Ingress中的每个路径都需要有对应的路径类型。不包含显式
pathType
的路径将无法通过验证。有三种支持的路径类型:
ImplementationSpecific
:使用此路径类型,匹配取决于IngressClass。实现可以将其视为单独的pathType
或将其与Prefix
或Exact
路径类型相同。
Exact
:精确匹配URL路径并区分大小写。
Prefix
:基于/
分割的URL路径前缀进行匹配。匹配是大小写敏感的,在路径元素的元素的基础上完成的。路径元素指的是由/
分隔符分隔的路径中的标签列表。如果每个p都是请求路径p的元素前缀,则请求匹配路径p。