将它连接到 istio 后,如何为我的 keycloak 实例创建一个 URL 前端
Posted
技术标签:
【中文标题】将它连接到 istio 后,如何为我的 keycloak 实例创建一个 URL 前端【英文标题】:How do I create a URL frontend to my keycloak instance after connecting it up to istio 【发布时间】:2020-07-23 17:20:38 【问题描述】:我已经安装了 istio,可以在 Rancher 上看到它。我也安装了keycloak。我正在尝试连接两者并设置网关,以便我可以通过 URL 访问 keycloak 前端。 在我的 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
现在当我尝试使用http://node_ip_address:port/keycloak 访问URL 时,我发现我无法访问前端。我已经验证了 keycloak 已经安装并且 pod 已经在 Rancher 上启动并运行。 我还将我的 istio 实例连接到 bookinfo application,并且能够运行 bookinfo-gateway 并使用类似于 here 描述的网关连接到 http://node_ip_address:port/productpage。我正在尝试仅为 keycloak 设置相同的网关。 我在我的 yaml 文件中做错了什么。我该如何解决?任何帮助表示赞赏。我是否正确连接了端口?
【问题讨论】:
【参考方案1】:据我所知,您应该修复您的虚拟服务。
我用helm和keycloak helm chart准备了一个小例子。
另存为keycloak.yaml,你可以在这里配置你的keycloak密码。
keycloak:
service:
type: ClusterIP
password: mykeycloakadminpasswd
persistence:
deployPostgres: true
dbVendor: postgres
使用上面准备的 helm 和值安装 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
virtual service route.host
是 kubernetes keycloak pod service的名称。
kubectl 获取服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
keycloak-http ClusterIP 10.0.14.36 <none> 80/TCP 22m
您应该能够通过您的 ingress_gateway_ip/keycloak 或 ingress_gateway_ip/auth 连接到 keycloak 并使用 keycloak 凭据登录,在我的示例中是 login: keycloak
和 password: mykeycloakadminpasswd
。
注意,您需要为 /auth 添加前缀,因为它是默认的 keycloak web 来执行所有操作。 Keycloak 前缀只是在这里重写为 /auth。
【讨论】:
以上是关于将它连接到 istio 后,如何为我的 keycloak 实例创建一个 URL 前端的主要内容,如果未能解决你的问题,请参考以下文章