Kubernetes内部的Istio CORS和SSL问题

问题描述 投票:0回答:1

我一直在砸这个问题,我不知道这是错误还是配置错误。我遇到的情况如下:

在我的集群内部,我有一个名为“ testing”的名称空间,其中有2个部署:

  1. 前端
  2. 后端

服务:

  1. front-end-service.local
  2. back-end-service.local

两者的服务均正常运行,并且ALB配置为可从浏览器访问。

  1. https://front.example.com
  2. https://back.example.com

在集群内部,从前端,我可以将带有变量的后端指向https://back.example.com,并且一切都会按预期进行。

但是,我被要求在集群内部进行通信,所以我的第一次尝试是这次将前端指向后端服务。

试图指向:https://back-end-service.local,并收到此错误:

原因:CORS请求未成功

猜测是由于TLS,我在命名空间中部署了Istio,并在STRICT模式下启用了相互TLS。打开Kiali后,我确实看到加密的通讯正常运行,但是,仍然出现相同的错误。

测试我做了:

如果我登录到前端窗格并尝试卷曲https://back.example.com,我的API会给出肯定的响应。

如果我卷曲https://back-end-service.local,则会卷曲:(35)SSL例程:SSL23_GET_SERVER_HELLO:未知协议。

因此,我可以与后端进行通信,而无需进入群集,然后再返回,但是如果我尝试在INSIDE服务之间进行通信,则它将失败,并显示CORS和SSL错误。

我的配置:

kind: PeerAuthentication
apiVersion: security.istio.io/v1beta1
metadata:
  name: default
  namespace: testing
  selfLink: >-
    /apis/security.istio.io/v1beta1/namespaces/production/peerauthentications/default     
  resourceVersion: '7291'
  generation: 1
  creationTimestamp: '2020-06-06T00:22:24Z'
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: >
      {"apiVersion":"security.istio.io/v1beta1","kind":"PeerAuthentication","metadata":{"annotations":{},"name":"default","namespace":"testing"},"spec":{"mtls":{"mode":"STRICT"}}}
spec:
  selector: ~
  mtls:
    mode: STRICT
  portLevelMtls: ~

后端服务:

kind: Service
apiVersion: v1
metadata:
  name: back-end-service
  namespace: testing
  selfLink: /api/v1/namespaces/testing/services/back-end-service
  uid: dccf1b
  resourceVersion: '7520501'
  creationTimestamp: '2020-05-14T21:48:54Z'
  labels:
    app: back-end
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: >
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"back-end"},"name":"back-end-service","namespace":"testing"},"spec":{"ports":[{"name":"http","port":3001,"targetPort":3001}],"selector":{"app":"back-end"}}}
  finalizers:
    - service.kubernetes.io/load-balancer-cleanup
spec:
  ports:
    - name: https
      protocol: TCP
      port: 3001
      targetPort: 3001
      nodePort: 30742
  selector:
    app: back-end
  clusterIP: 192.168.1.1
  type: LoadBalancer
  sessionAffinity: None
  externalTrafficPolicy: Cluster

我已经尝试将名称更改为HTTP,将HTTPS更改为服务,但超出了此范围。任何帮助将不胜感激!

kubernetes istio istio-kiali
1个回答
1
投票

您可以尝试使用端口3001代替端口443吗?端口443上可能没有https,因此SSL错误。

© www.soinside.com 2019 - 2024. All rights reserved.