Приложение Spring Boot с угловым и входным ключом - PullRequest
0 голосов
/ 23 июня 2019

Я хотел бы запустить приложение Spring Boot с Angular Frontend, используя Keycloak в качестве IDP внутри кластера Kubernetes.

Запуск приложения с HTTPs работает нормально:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/x-forwarded-prefix: "/"
spec:
  tls:
    - hosts:
        - myapp.northeurope.cloudapp.azure.com
      secretName: tls-secret
  rules:
    - host: myapp.northeurope.cloudapp.azure.com
      http:
        paths:
          - path: /?(.*)
            backend:
              serviceName: my-service
              servicePort: 8080

Ноесли приходит Keycloak, я застреваю

Сначала я должен был изменить путь к приложению:

metadata:
  name: my-app-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/x-forwarded-prefix: "/app"
spec:
  tls:
    - hosts:
        - myapp.northeurope.cloudapp.azure.com
      secretName: tls-secret
  rules:
    - host: myapp.northeurope.cloudapp.azure.com
      http:
        paths:
          - path: /app/?(.*)
            backend:
              serviceName: my-service
              servicePort: 8080

Но тогда загрузка угловых библиотек не работает, потому что приложение пытаетсязагрузите их из /app / *. 1011 *

. То же самое для IDP:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: keycloak-ingress
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/x-forwarded-prefix: "/idp"
spec:
  tls:
    - hosts:
        - myapp.northeurope.cloudapp.azure.com
      secretName: tls-secret
  rules:
    - host: myapp.northeurope.cloudapp.azure.com
      http:
        paths:
          - path: /idp/?(.*)
            backend:
              serviceName: keycloak-http
              servicePort: 80

Любая помощь, настройки которой приветствуются: -)

С уважением

1 Ответ

0 голосов
/ 24 июня 2019

мы сталкиваемся с подобной проблемой при изменении пути к нашим Angular-приложениям. И я должен сказать вам, что для вашей проблемы не существует решения, специфичного для Ingress.

Мы решили это, запустив скрипт при запуске контейнера с нашим скомпилированным Angular App, который изменяет значение <base href="/"> на значение переменной среды.

Сценарий выглядел примерно так:

sed -i.bak 's#<base href="/">#<base href="'$BASE_HREF'/">#g' /usr/share/nginx/html/index.html
nginx -g "daemon off;"

Это заменит базовый href по умолчанию значением, содержащимся в $BASE_HREF, а затем запустит nginx, который доставит наше скомпилированное приложение. Важное примечание: Путь в <base href="..."> должен заканчиваться /. Позаботьтесь об этом при установке переменной среды.

Для запуска KeyCloack вы можете попробовать подход , описанный в этом StackOverflow-Post , и попытаться установить переменную среды PROXY_ADDRESS_FORWARDING=true внутри KeyClock-Container.

...