我正在探索托管在EKS(亚马逊)上的k8s集群上的istio服务网格。
我尝试在一个新的k8s集群上部署istio-1.2.2,其中包含用于bookapp演示的demo.yml文件,以及我正确理解的大多数用例。
然后,我使用helm默认配置文件(推荐用于生产)在我现有的dev集群上部署istio,其中运行了1000多个微服务,我注意到我的服务可以调用http端点,但不能调用外部安全端点(https://www.google.com等)。
我得到了:
curl:(35)错误:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong版本号
虽然我能够从测试集群调用外部https端点。
为了验证,我检查了出口策略,并且在两个集群中都是模式: ALLOW_ANY。
现在,我从我的dev集群中完全删除了istio,并安装了demo.yml进行测试,但现在这也不起作用。
我试图把我的问题和这件事联系起来,但没有取得任何成功。
我不明白我错过了什么或者我做错了什么。
注意:我指的是这个设置:https://istio.io/docs/setup/kubernetes/install/helm/
发布于 2019-08-24 19:47:55
这很可能是Istio中的一个bug (例如istio/istio#14520):如果您在集群中的任何位置都有任何Kubernetes Service对象侦听端口443,但其名称以http
(而不是https
)开头,则它将中断所有出站HTTPS连接。
我遇到的这个例子包括配置一个AWS负载均衡器来完成TLS终止。Kubernetes服务需要公开端口443来配置负载均衡器,但它接收的是纯未加密的HTTP。
apiVersion: v1
kind: Service
metadata:
name: breaks-istio
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:...
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
selector: ...
ports:
- name: http-ssl # <<<< THIS NAME MATTERS
port: 443
targetPort: http
当我对此进行了实验之后,将name:
更改为https
或tcp-https
似乎是可行的。这些名称前缀对Istio很重要,但是我没有立即发现告诉Istio端口是HTTPS (尽管它实际上不提供TLS)与普通的未解释的TCP之间的功能上的区别。
您确实需要搜索集群,查找每个侦听端口443的服务,并确保端口名不以http-...
开头。
https://stackoverflow.com/questions/57640466
复制相似问题