1、启动keycloak
开始之前,确保已经安装Docker。
从终端开启 keycloak,命令如下:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:18.0.0 start-dev
2、应用示例
(1)登录管理控制台
去Keycloak管理控制台并使用之前创建的用户名和密码登录。登录后界面如下:
3,创建一个realm
在 keycloak 中,一个 realm 相当于一个租户。它允许创建独立的应用程序和用户组。master 是keycloak 中默认的 realm,master 是专用于管理 keycloak的,不建议用于自己的应用程序。要应用于自己的应用程序时,一般建立一个指定名称的 realm。创建 realm 的步骤如下:
3.1、打开Keycloak管理控制台。
3.2、将鼠标移到左上角标有 Master 的下拉框处,在下拉处可以看到 Add realm 按钮,点击该按钮,可以看到如下界面:
3、在右侧 Add realm 界面的 Name 处填写自己相应建立的 realm 的名称,例如: myrealm。
4、点击 Create 按钮创建。
创建一个user
在新创建的 realm 中没有用户,需要先创建一个,创建步骤如下:
1、打开Keycloak管理控制台。
2、点击左侧菜单中的 Users,在弹出的右侧面板中点击 Add user,如下图:
在 Add user 面板中,填写类似如下的示例信息:
Username:myuser
First Name:my
Last Name:user
4、点击 Save 按钮。
5、保存成功后,设置初始密码,操作如下:
1、在出现界面点击 Credentials,出现如下界面。
2、设置密码,设置完后,Temporary 处点击为 OFF。
3、点击 Set Password 按钮完成密码设置。
(4)配置第一个示例应用程序
现在尝试配置第一个应用程序。 第一步是用你的 Keycloak 实例注册一个应用程序,如下:
1、打开Keycloak管理控制台。
2、点击左侧的 Clients,在右侧的弹出界面点击 Create 按钮,得到 Add Client 界面。
3、在 Add Client 界面填写相关信息,示例如下:
Client ID:myclient
Client Protocol: openid-connect
Root URL:Test application - Keycloak
4、点击 Save 按钮。
添加域 名字叫istio
访问keycloak添加客户端
配置客户端
获取客户端的凭据,后面要用
创建mappers
6,创建nginx应用k8s deployment和ingress, nginx-ingress部署请看这个文章:如何在本地k8s 1.27中设置 nginx-ingress 局域网入口访问网址_ingress-nginx loadbalancer-CSDN博客
6.1 应用的 deployment yaml
apiVersion: v1
kind: Endpoints
metadata:
name: proxy-ingress
subsets:
- addresses:
- ip: 192.168.2.96
ports:
- port: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
release: canary
ports:
- name: http
targetPort: 80
port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-backend-pod
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp
image: registry.cn-hangzhou.aliyuncs.com/luyanjiegerouth/nginx:alpine
ports:
- name: http
containerPort: 80
6.2 创建应用ingress yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myapp
annotations:
nginx.ingress.kubernetes.io/auth-signin: http://$host/oauth2/start?rd=$escaped_request_uri
nginx.ingress.kubernetes.io/auth-url: http://$host/oauth2/auth
nginx.ingress.kubernetes.io/proxy-buffer-size: 512k
spec:
ingressClassName: "nginx"
rules:
- host: "myapp.magedu.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: myapp
port:
number: 80
7,创建oauth2-proxy的deployment和ingress yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: oauth-proxy
name: oauth-proxy
namespace: oauth2-proxy
spec:
type: ClusterIP
selector:
app: oauth-proxy
ports:
- name: http-oauthproxy
port: 4180
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: oauth-proxy
name: oauth-proxy
namespace: oauth2-proxy
spec:
replicas: 1
selector:
matchLabels:
app: "oauth-proxy"
template:
metadata:
labels:
app: oauth-proxy
spec:
volumes:
- name: oauth2-proxy-config
configMap:
name: oauth2-proxy-config
containers:
- name: oauth-proxy
image: "quay.io/oauth2-proxy/oauth2-proxy:latest"
ports:
- containerPort: 4180
volumeMounts:
- name: oauth2-proxy-config
mountPath: /etc/oauth2-proxy.cfg
subPath: oauth2-proxy.cfg
args:
- --config=/etc/oauth2-proxy.cfg
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: oauth2-proxy
namespace: oauth2-proxy
spec:
ingressClassName: nginx
rules:
- host: myapp.magedu.com
http:
paths:
- backend:
service:
name: oauth-proxy
port:
number: 4180
path: /oauth2
pathType: Prefix
---
apiVersion: v1
data:
oauth2-proxy.cfg: |-
# Provider config
provider="keycloak"
provider_display_name="Keycloak"
login_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/auth"
redeem_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/token"
validate_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/userinfo"
profile_url="http://keycloak.qnxr.ltd/realms/testoauth2/protocol/openid-connect/userinfo"
ssl_insecure_skip_verify=true
# Client config
client_id="myclient"
client_secret="qvi04SUXYJvRDDW7TrujtpQgVWL5eGJK"
cookie_secret="ZzBkN000Wm0pQkVkKUhzMk5YPntQRUw_ME1oMTZZTy0="
cookie_secure="false"
# Upstream config
http_address="0.0.0.0:4180"
upstreams="file:///dev/null"
email_domains=["*"]
oidc_issuer_url="http://keycloak.qnxr.ltd/realms/testoauth2"
scope="openid"
whitelist_domains=[".myapp.magedu.com:*"]
# Redis session store config
# session_store_type="redis"
# redis_connection_url="redis://<RedisServiceName>:6379"
kind: ConfigMap
metadata:
name: oauth2-proxy-config
namespace: oauth2-proxy
8,访问:http://myapp.magedu.com
9, 登陆keycloak用户后,成功跳转