sso单点登录casdoor on docker and k8s

概述

Casdoor 是一个基于 OAuth 2.0、OIDC、SAML 和 CAS 的 UI 优先身份访问管理 (IAM) /单点登录 (SSO) 平台。
Casdoor 同时提供 Web UI 和来自应用程序用户的登录请求。

Casdoor 功能
Casdoor 遵循由 Golang 开发的前端和后端独立架构。它支持高并发,提供基于 Web 的 UI 进行管理,并支持 10+ 种语言的本地化。
Casdoor 支持第三方应用程序登录,例如 GitHub、Google、QQ 和微信,并且支持使用插件扩展第三方登录。
Casdoor 支持基于 Casbin 的授权管理。它支持 ACL、RBAC、ABAC 和 RESTful 访问控制模型。
Casdoor提供手机验证码、电子邮件验证码和密码找回功能。
Casdoor 支持审计和记录访问日志。
Casdoor 集成了阿里云、腾讯云和七牛云图像 CDN 云存储。
Casdoor 允许自定义注册、登录和密码检索页面。
Casdoor 支持通过数据库同步与现有系统集成,从而实现向 Casdoor 的平稳过渡。
Casdoor 支持 MySQL、PostgreSQL 和 SQL Server 等主流数据库,并支持使用插件扩展新数据库。

https://casdoor.org/docs/basic/try-with-docker/
https://github.com/casbin/casdoor/releases

on docker

docker run \
  -e driverName=mysql \
  -e dataSourceName='gaojinbo:gaojinbo.com@tcp(gaojinbo.com:3306)/' \
  -p 8000:8000 \
  casbin/casdoor:v1.487.0

on k8s

vi casdoor.yaml
apiVersion: v1
kind: Service
metadata:
  name: casdoor
  labels:
    app: casdoor
spec:
  ports:
    - port: 8000
  selector:
    app: casdoor
    tier: frontend
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: casdoor
  labels:
    app: casdoor
spec:
  replicas: 1
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
  selector:
    matchLabels:
      app: casdoor
      tier: frontend
  template:
    metadata:
      labels:
        app: casdoor
        tier: frontend
    spec:
      containers:
      - image: casbin/casdoor:v1.487.0
        name: casdoor
        resources:
          limits:
            memory: 2000Mi
            cpu: 500m
          requests:
            memory: 1000Mi
            cpu: 100m
        livenessProbe:
          tcpSocket:
            port: 8000
          initialDelaySeconds: 1
          periodSeconds: 3
          timeoutSeconds: 10
        readinessProbe:
          tcpSocket:
            port: 8000
          initialDelaySeconds: 1
          periodSeconds: 5
        lifecycle:
          preStop:
            exec:
              command: ["sh", "-c", "sleep 10"]
        env:
        - name:  RUNNING_IN_DOCKER
          value: "true" 
        - name: ldapServerPort
          value: "1389"
        - name: driverName
          value: "mysql"
        - name: dataSourceName
          value: "gaojinbo:gaojinbo.com@tcp(mysql-cluster.db:6446)/"
        ports:
        - containerPort: 8000
          name: casdoor

配置istio网关

vi istio-casdoor.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: casdoor-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 8080	#这里改成8000会失败,curl报错404 NR route_not_found
      name: http
      protocol: HTTP
    hosts:
    - "cas.gaojinbo.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: casdoor-vs
spec:
  hosts:
  - "cas.gaojinbo.com"
  gateways:
  - casdoor-gateway
  http:
  - route:
    - destination:
        host: casdoor
        port:
          number: 8000

访问

https://casdoor.gaojinbo.com
用户admin
密码123

注意:
k8s运行多个casdoor副本浏览器会报错,casdoor不支持