Allen Blog Allen Blog

SELF SPACE

目录
个人身份和访问管理平台-个人AI能效平台
/        

个人身份和访问管理平台-个人AI能效平台

1. 概述

Logto 是一个基于 Kubernetes 部署的身份认证和用户管理平台。它使用 PostgreSQL 作为数据库,并通过 Ingress 暴露服务,支持 HTTPS 访问。Logto 提供了两个主要服务:

  • Auth 服务:用于用户认证,端口为 3001
  • Admin 服务:用于管理界面,端口为 3002

2. 前提条件

在开始部署之前,请确保以下环境和工具已准备就绪:

  • Kubernetes 集群:版本 1.20 或更高。
  • kubectl:已配置并能够访问目标集群。
  • PostgreSQL 数据库:已部署并可用,数据库连接信息需提供。
  • 域名和 TLS 证书:已准备好域名(如 logto.jiufog.spacelogto-admin.jiufog.space)和对应的 TLS 证书。强制
  • 持久化存储:已配置并可用,支持 ReadWriteMany 访问模式的存储类(如 NFS)。

3. 部署步骤

3.1 准备 Manifest 文件

将以下 Manifest 文件保存到本地,并根据实际情况替换 {{ }} 中的内容。

logto-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: logto
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: logto
  template:
    metadata:
      labels:
        app: logto
    spec:
      initContainers:
        - image: ghcr.io/logto-io/logto
          command:
            - /bin/sh
          args:
            - '-c'
            - 'npm run cli connector add -- --official'
          name: init
          volumeMounts:
            - name: logto-storage
              mountPath: /etc/logto/packages/core/connectors
          env:
            - name: NODE_TLS_REJECT_UNAUTHORIZED
              value: "1"
            - name: TRUST_PROXY_HEADER
              value: "true"
            - name: DB_URL
              value: "{{ YOUR_DB_URL }}"  # 替换为实际的 PostgreSQL 连接字符串
            - name: ENDPOINT
              value: "{{ YOUR_ENDPOINT }}"  # 替换为实际的 Auth 服务端点
            - name: ADMIN_ENDPOINT
              value: "{{ YOUR_ADMIN_ENDPOINT }}"  # 替换为实际的 Admin 服务端点
      containers:
        - name: logto
          image: ghcr.io/logto-io/logto
          volumeMounts:
            - name: logto-storage
              mountPath: /etc/logto/packages/core/connectors
          env:
            - name: NODE_TLS_REJECT_UNAUTHORIZED
              value: "1"
            - name: TRUST_PROXY_HEADER
              value: "true"
            - name: DB_URL
              value: "{{ YOUR_DB_URL }}"  # 替换为实际的 PostgreSQL 连接字符串
            - name: ENDPOINT
              value: "{{ YOUR_ENDPOINT }}"  # 替换为实际的 Auth 服务端点
            - name: ADMIN_ENDPOINT
              value: "{{ YOUR_ADMIN_ENDPOINT }}"  # 替换为实际的 Admin 服务端点
          command: ["sh", "-c", "npm run cli db seed -- --swe && npm start"]
      volumes:
        - name: logto-storage
          persistentVolumeClaim:
            claimName: logto-pvc

logto-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: logto-service
  namespace: dev
  labels:
    app: logto
spec:
  selector:
    app: logto
  ports:
    - name: auth
      port: 3001
    - name: admin
      port: 3002
  type: ClusterIP

logto-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: logto-pvc
  namespace: dev
spec:
  storageClassName: "{{ YOUR_STORAGE_CLASS }}"  # 替换为实际的存储类名称
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

logto-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: logto-ingress
  namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: "{{ YOUR_AUTH_HOST }}"  # 替换为实际的 Auth 服务域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: logto-service
                port:
                  number: 3001
  tls:
    - hosts: 
        - "{{ YOUR_AUTH_HOST }}"  # 替换为实际的 Auth 服务域名
      secretName: "{{ YOUR_AUTH_TLS_SECRET }}"  # 替换为实际的 TLS Secret 名称

logto-admin-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: logto-ingress-admin
  namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: "{{ YOUR_ADMIN_HOST }}"  # 替换为实际的 Admin 服务域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: logto-service
                port:
                  number: 3002
  tls:
    - hosts:
        - "{{ YOUR_ADMIN_HOST }}"  # 替换为实际的 Admin 服务域名
      secretName: "{{ YOUR_ADMIN_TLS_SECRET }}"  # 替换为实际的 TLS Secret 名称

3.2 创建 Namespace

如果 dev Namespace 尚未创建,请先创建:

kubectl create namespace dev

3.3 部署应用程序

使用 kubectl 部署应用程序:

kubectl apply -f logto-deployment.yaml
kubectl apply -f logto-svc.yaml
kubectl apply -f logto-pvc.yaml
kubectl apply -f logto-ingress.yaml
kubectl apply -f logto-admin-ingress.yaml

3.4 验证部署

检查 Deployment、Service、PVC 和 Ingress 是否成功创建:

kubectl -n dev get deployment,service,pvc,ingress

4. 验证部署

4.1 检查 服务状态 状态

确保 服务 已成功启动并处于 Running 状态:

kubectl -n dev get pods,svc,ingress

4.2 访问应用程序

通过浏览器访问以下地址,确保应用程序能够正常加载:

  • Auth 服务https://{{ YOUR_AUTH_HOST }}
  • Admin 服务https://{{ YOUR_ADMIN_HOST }}

4.3 检查日志

如果应用程序无法正常工作,可以查看 Pod 日志以排查问题:

kubectl -n dev logs <pod-name>

5. 维护和监控

5.1 扩缩容

根据需要调整 Deployment 的副本数:

kubectl -n dev scale deployment logto --replicas=3

5.2 更新镜像

如果需要更新应用程序镜像,可以修改 image 字段并重新应用 Manifest:

kubectl apply -f logto-deployment.yaml

5.3 监控

建议配置 Prometheus 和 Grafana 对应用程序进行监控,重点关注以下指标:

  • Pod 的 CPU 和内存使用率。
  • 数据库连接数。
  • 持久化存储的使用情况。

6. 故障排除

6.1 Pod 无法启动

  • 检查镜像:确保镜像名称和版本正确。
  • 检查环境变量:确保所有环境变量已正确配置。
  • 查看日志:通过 kubectl logs 查看 Pod 日志以获取更多信息。

6.2 无法访问应用程序

  • 检查 Ingress:确保 Ingress 配置正确,TLS 证书已正确加载。
  • 检查 Service:确保 Service 的端口配置与 Pod 一致。
  • 检查网络策略:确保没有网络策略阻止流量。

6.3 数据库连接失败

  • 检查连接字符串:确保 DB_URL 的值正确。
  • 检查数据库状态:确保 PostgreSQL 数据库已启动并允许外部连接。

7. 附录

7.1 需要用户替换的内容

以下是需要用户根据实际情况替换的内容:

  • {{ YOUR_DB_URL }}:替换为实际的 PostgreSQL 连接字符串。
  • {{ YOUR_ENDPOINT }}:替换为实际的 Auth 服务端点。
  • {{ YOUR_ADMIN_ENDPOINT }}:替换为实际的 Admin 服务端点。
  • {{ YOUR_STORAGE_CLASS }}:替换为实际的存储类名称。
  • {{ YOUR_AUTH_HOST }}:替换为实际的 Auth 服务域名。
  • {{ YOUR_ADMIN_HOST }}:替换为实际的 Admin 服务域名。
  • {{ YOUR_AUTH_TLS_SECRET }}:替换为实际的 Auth 服务 TLS 证书 Secret 名称。
  • {{ YOUR_ADMIN_TLS_SECRET }}:替换为实际的 Admin 服务 TLS 证书 Secret 名称。

7.2 参考链接

效果图:

image.png


标题:个人身份和访问管理平台-个人AI能效平台
作者:jiu5
地址:http://solo.jiufog.space/articles/2025/03/07/1741312861241.html