Как мне создать внешний интерфейс URL для моего экземпляра keycloak после его подключения к istio - PullRequest
3 голосов
/ 11 апреля 2020

Я установил istio и вижу его на Rancher. У меня также установлен ключевой плащ. Я пытаюсь соединить их и настроить шлюз, чтобы получить доступ к интерфейсу Keycloak через URL. В моем манифесте keycloak у меня есть

# Source: keycloak/templates/statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: keycloak
. 
. #Many other lines here
.
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP

Затем я настраиваю шлюз с помощью команды -

kubectl apply -f networking/custom-gateway.yaml

И в моем файле custom-gateway.yaml у меня есть -

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: keycloak-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: keycloak
spec:
  hosts:
  - "*"
  gateways:
  - keycloak-gateway
  http:
  - match:
    - uri:
        exact: /keycloak 
    rewrite:
      uri: "/" # Non context aware backend
    route:
    - destination:
        host: keycloak
        port:
          number: 80
    websocketUpgrade: true

Теперь, когда я пытаюсь получить доступ к URL-адресу с помощью http://node_ip_address: port / keycloak , я обнаруживаю, что не могу получить доступ к внешнему интерфейсу. Я проверил, что Keycloak установлен и модуль запущен на Rancher. У меня также есть экземпляр istio, подключенный к приложению bookinfo , и я могу запустить шлюз bookinfo и подключиться к http://node_ip_address: port / productpage со шлюзом, похожим на тот описано здесь . Я пытаюсь настроить тот же шлюз только для keycloak. Что я делаю не так в моих файлах yaml. Как я могу это исправить? Любая помощь приветствуется. У меня правильно подключены порты?

1 Ответ

1 голос
/ 14 апреля 2020

Насколько я вижу, вы должны исправить вашу виртуальную службу.

Я подготовил небольшой пример с helm и keycloak helm chart .


Сохраните это как keycloak.yaml, здесь вы можете настроить свой пароль keycloak.

keycloak:
  service:
    type: ClusterIP
  password: mykeycloakadminpasswd
  persistence:
    deployPostgres: true
    dbVendor: postgres

Установить keycloak со штурвалом и значениями, подготовленными выше.


helm upgrade --install keycloak stable/keycloak -f keycloak.yml

Создание шлюза и виртуальной службы


apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: keycloak-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: keycloak
spec:
  hosts:
  - "*"
  gateways:
  - keycloak-gateway
  http:
  - match:
    - uri:
        prefix: /auth
    - uri:
        prefix: /keycloak
    rewrite:
      uri: /auth
    route:
    - destination:
        host: keycloak-http
        port:
          number: 80

виртуальная служба route.host - это имя kubernetes keycloak pod служба .

kubectl get sv c

NAME                  TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
keycloak-http         ClusterIP   10.0.14.36    <none>        80/TCP     22m

Вы должны иметь возможность подключиться к keycloak через ваш ingress_gateway_ip / keycloak или ingress_gateway_ip / auth и войти с учетными данными keycloak, в моем примере это login: keycloak и password: mykeycloakadminpasswd.

Обратите внимание , что вам нужно добавить префикс для / auth, так как это веб-клавиатура по умолчанию, чтобы делать все. Префикс Keycloak просто переписать сюда / auth.

...