【问题标题】:How to access the keycloak.local ingress host?如何访问 keycloak.local 入口主机?
【发布时间】:2021-07-05 23:54:16
【问题描述】:

我刚刚使用 OperatorHub.io 官方指南安装了 keycloak kubernetes 算子:https://operatorhub.io/operator/keycloak-operator

之后我按照官方的 keycloak 入门指南创建了一个 operator 部署:https://www.keycloak.org/getting-started/getting-started-operator-kubernetes

我可以看到一切正常,因为所需的 pod、服务和入口正在启动并在一小段时间后运行。我不明白的是如何访问部署创建的入口,因为规范没有指定我的 kubernetes 集群的正常主机,而是这样:

spec:
  rules:
  - host: keycloak.local
    http:
      paths:
      - backend:
          serviceName: keycloak
          servicePort: 8443
        path: /
        pathType: ImplementationSpecific

我使用的那个指南没有说明这一点。 das keycloak.local 是什么意思,如何访问它?

编辑:我的 keycloak 配置如下所示:

apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  labels:
    app: mykeycloak
  name: mykeycloak
  namespace: test
spec:
  externalAccess:
    enabled: true
  instances: 1
status:
  credentialSecret: credential-mykeycloak
  externalURL: https://keycloak.local
  internalURL: https://keycloak.test.svc:8443
  message: ""
  phase: reconciling
  ready: true
  secondaryResources:
    ConfigMap:
    - keycloak-probes
    Deployment:
    - keycloak-postgresql
    Ingress:
    - keycloak
    PersistentVolumeClaim:
    - keycloak-postgresql-claim
    Secret:
    - credential-mykeycloak
    - keycloak-db-secret
    Service:
    - keycloak-postgresql
    - keycloak
    - keycloak-discovery
    StatefulSet:
    - keycloak
  version: 14.0.0

【问题讨论】:

  • 您能提供您的 Keycloak 配置吗? (kubectl get keycloak ) -o yaml?
  • @CLNRMN 好了。可以看到,外部 url 设置为 keycloak.local,内部 url 指定创建的 ClusterIP 服务,该服务无法从集群外部访问。

标签: kubernetes keycloak kubernetes-ingress


【解决方案1】:

您已在 Keycloak CRD 中配置以下内容。

  externalAccess:
    enabled: true

这将创建一个您已经发布的 Ingress-Object。默认情况下,Keycloak Operator 使用 keycloak.local 作为 host 的值。

https://github.com/keycloak/keycloak-operator/blob/master/deploy/olm-catalog/keycloak-operator/12.0.1/keycloaks.keycloak.org.crd.yaml#L62

因此,如果您想将其更改为 keycloak.example.org,您必须将您的 Keycloak 定义编辑为:

  externalAccess:
    enabled: true
    host: keycloak.example.org

之后,您的 Ingress-Controller 将在您的请求中侦听此路径。

这应该回答您的第一个问题“das keycloak.local 是什么意思”。

您的第二个问题,“我如何访问它”:

我假设您的系统上部署了一个 Ingress Controller。如果没有,请阅读该主题 (https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)。

如果您部署了 Ingress-Controller,您应该能够使用定义的主机访问您的 Keycloak。

【讨论】:

  • 我实际上确实部署了一个入口控制器,它对我的​​其他入口实例运行良好。为了让入口实例工作,我必须将入口控制器 url 指定为主机。所以我不明白为什么操作员甚至将 keycloak.local 设置为默认值,而不是在未指定时中止。它显然不适用于默认值。我会尝试你的建议,即简单地交换主机参数 - 希望这会奏效。
  • 这确实将入口资源的主机更改为入口控制器之一,但它似乎没有相应地路由流量。当我配置另一个入口资源以将传入流量路由到主机的基本路径到另一个应用程序时,我被重定向到该应用程序而不是我的 keycloak 实例。你知道如何为自动生成的keycloak服务实例配置路径(和pathType,它被自动设置为ImplementationSpecific)吗?
  • 我认为 Operator 无法做到这一点,因为路径是硬编码且不可配置的。您可以尝试使用 kubectl patch 对其进行修补或自己创建 Ingress-Ressource。
  • 一旦我修补了入口以使用我的负载均衡器的 tls 并删除了我的其他入口,它实际上就起作用了。不幸的是,似乎无法以运营商接受的方式修补路径。它只适用于“/”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2021-11-14
  • 2018-08-02
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多