K8s + Istio + Firefox hard refre sh. Причиной доступа к услуге 404 является другой сервис, пока другой сервис не будет доступен - PullRequest
0 голосов
/ 19 апреля 2020

Обучение k8s + istio здесь. Я установил 2 узла + 1 мастер-кластер с kops. У меня есть Istio в качестве контроллера доступа. Я пытаюсь настроить OID C Auth для фиктивной nginx службы. У меня супер странная ошибка. Я понятия не имею, откуда она.

Итак, у меня есть

  1. Сервис Keycloak
  2. Nginx Сервис

Служба keycloak работает на keycloak.example.com Служба nginx работает на example.com

Для AWS существует Classi c ELB. Существуют DNS-записи Route53 для

ALIAS example.com          dualstack.awdoijawdij.amazonaws.com
ALIAS keycloak.example.com dualstack.awdoijawdij.amazonaws.com

Когда я настраивал службу keycloak, и была только эта служба, у меня не было проблем. Но когда я добавил фиктивную службу nginx, я начал получать ее.

Я бы использовал firefox до go для keycloak.example.com и получил 404. Если я сделаю жесткую ссылку sh, затем страница загружается.

Тогда я go отправлюсь на example.com и получу 404. Если я сделаю полную ссылку sh, то страница загрузится.

Если я сделаю полную ссылку sh на одной странице, затем, когда я go перехожу на другую страницу, мне придется выполнить полную перезагрузку, или я получу 404. Как будто какая-то запись DNS переключается между этими двумя вещами всякий раз, когда я выполняю жесткую ссылку sh. Я понятия не имею, как отладить это.

Если я

Тогда все хорошо. Похоже, проблема возникает только в браузере.

Я пытался открыть страницы в режиме инкогнито, но проблема сохраняется.

Может кто-нибудь помочь мне отладить это?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
    - port: 80
      name: http
      protocol: TCP
  selector:
    app: nginx
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: nginx-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      tls:
        httpsRedirect: true
      hosts:
        - "example.com"
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: ingress-cert
      hosts:
        - "example.com"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: nginx
spec:
  hosts:
    - "example.com"
  gateways:
    - nginx-gateway
  http:
    - route:
        - destination:
            port:
              number: 80
            host: nginx
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: keycloak-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      tls:
        httpsRedirect: true
      hosts:
        - "keycloak.example.com"
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: ingress-cert
      hosts:
        - "keycloak.example.com"
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: keycloak
spec:
  hosts:
    - "keycloak.example.com"
  gateways:
    - keycloak-gateway
  http:
    - route:
        - destination:
            port:
              number: 80
            host: keycloak-http

1 Ответ

2 голосов
/ 19 апреля 2020

Проблема заключалась в том, что я использовал один и тот же сертификат для обоих шлюзов, что привело к сохранению одного и того же tcp-соединения для обеих служб.

Здесь обсуждается https://github.com/istio/istio/issues/9429

При использовании разных сертификатов для обоих портов шлюза проблема исчезает

...