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

小蕊 发表于: 2019-08-26   最后更新时间: 2019-08-26  

我在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

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



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




小蕊 发表于: 20天前   最后更新时间: 20天前   游览量:160

上一条: 如何在kubernetes Pods中重试拉取镜像?
下一条: kubernetes如何让在pod中运行的代码知道其pod的名称

  • 你这个错像是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 -....开头,就好了