Istio CORS и проблема SSL внутри Kubernetes

Я ломал голову из-за этой проблемы, я не знаю, ошибка это или просто неправильная конфигурация. Ситуация у меня следующая:

Внутри моего кластера у меня есть пространство имен "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 в пространстве имен с включенным взаимным TLS в режиме STRICT. После открытия Kiali я вижу, что зашифрованная связь работает, но все равно получаю ту же ошибку.

Тестирование я сделал:

Если я вхожу в модуль Front-End и пытаюсь создать завиток https://back.example.com/, я получаю положительный ответ от своего API.

Если я сделаю curl https://back-end-service.local/, я получу curl: (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, но это выходит за рамки этого. Любая помощь будет признательна!

1 ответ

Решение

Можете попробовать использовать порт 3001 вместо порта 443? Вероятно, на порту 443 нет https, поэтому ошибка SSL.

Другие вопросы по тегам