部署istio Service Mesh后Kubernetes Pod无法发出https请求

时间:2019-08-24 18:12:50

标签: kubernetes istio api-gateway amazon-eks

我正在EKS(Amazon)托管的k8s集群上探索istio服务网格。

我尝试使用用于bookapp演示的demo.yml文件以及我正确理解的大多数用例在新的k8s集群上部署istio-1.2.2。

然后,我使用头盔默认配置文件(推荐用于生产)在运行了数百个微服务的现有开发集群上部署了istio,我注意到我的服务可以调用http端点,但不能调用外部安全端点({{ 3}}等)

我得到了:

  

卷曲:(35)错误:1400410B:SSL例程:CONNECT_CR_SRVR_HELLO:错误   版本号

尽管我能够从测试集群中调用外部https端点。

要进行验证,我检查了出口策略,两个集群均处于模式:ALLOW_ANY

现在,我从开发集群中完全删除了istio并安装了demo.yml进行测试,但是现在这也无法正常工作。

我尝试与此相关,但是没有成功。

https://www.google.com

我不明白自己在想什么或做错了什么。

注意:我指的是此设置:https://discuss.istio.io/t/serviceentry-for-https-on-httpbin-org-resulting-in-connect-cr-srvr-hello-using-curl/2044

1 个答案:

答案 0 :(得分:2)

这很可能是Istio中的一个错误(例如,参见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:更改为httpstcp-https似乎是可行的。那些name prefixes对Istio来说很重要,但是我还没有立即发现告诉Istio端口是HTTPS(即使它实际上不提供TLS)与普通的未解释TCP之间的功能区别。

您确实需要搜索集群并找到监听端口443的每一个服务,并确保端口名称不是以http-...开头。