部署istio服务网格后,Kubernetes pods无法向外发出https请求

小蕊 发表于: 2019-08-26   最后更新时间: 2019-08-26 23:17:29   3,744 游览

我在EKS(亚马逊)创建了一个新的k8s集群部署istio,版本是1.2.2

istio的安装参考:https://istio.io/docs/setup/kubernetes/install/helm/

然后,我使用helm默认配置文件(推荐用于生产)部署了istio,运行了100个微服务,但是,我的服务可以调用http的站点,但不能调用外部安全站点(如:https://orchome.com 等)

错误如下:

curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number

不知道哪里不对,请问有人知道吗?

发表于 2019-08-26

你这个错像是istio的bug(参考istio/istio#14520),,如果你的群集中有任何Kubernetes Service,如果它在端口443上进行监听,但其名称以http而不是https开头,它就会中断所有出站HTTPS连接。

以下是个有问题的示例:

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 # <<<< 问题就在这里
      port: 443
      targetPort: http

Kubernetes Service需要公开端口443以配置负载均衡器,但它接收到了普通的未加密HTTP的。将名称改为:https 或 tcp-https 就好了。

你搜索你的集群,找到侦听端口443的Service,并确保端口名称不以http -....开头,就好了

小蕊 -> 半兽人 5年前

谢谢大神回复,我发了有个“http-metrics”的名字在443端口上。我删除了那个svc,问题就解决了。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题