





















k8s 来部署的,抛开复杂度看,能够以统一的方式控制所有机器并灵活调度的特性深得我心。k8s 具备了很强大的 api-server 所以我决定基于其上搞个简单的导航页。简单介绍下我用到的组件,如果觉得还行的话,其实可以拉代码简单适配自己的设施
ingress 我选择的是 traefik,这部分其实只要你喜欢,可以随便换cert-manager 管理证书,所以我新增服务只要按照模板写一下配置就轻松跑起来kubectl 来作为 api-server 的 proxy,配合 caddy 来做反向代理caddy 还负责作为静态资源服务器,我的所有逻辑都是前端完成,frontend -> caddy -> kubectl -> api-serveringress 资源我都使用 annotations 来添加自定义字段,字段都以 homelab 开头,以 jellyfin 举例:---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: jellyfin
annotations:
kubernetes.io/ingress.class: traefik
homelab/name: Jellyfin # 导航页上显示的名字
homelab/host: jellyfin # 子域名前缀
homelab/order: "33" # 顺序,就是个排序的作用
spec:
entryPoints:
- websecure
routes:
- match: Host(`jellyfin.dosk.host`)
kind: Rule
services:
- name: jellyfin
port: 8096
这部分相对就复杂些了,不过,可以直接参考我封装好的代码 Infinity-Server/dockerset 或镜像 docker.io/springhack/aura
caddy 的代码,反向代理了 kubectl proxy 并提供 file-server::8000 {
handle_path /services {
rewrite * "/apis/{env.API_GROUP}/{env.API_VERSION}/{env.API_CRD}"
reverse_proxy 127.0.0.1:6000 {
header_up Host {upstream_hostport}
}
}
file_server * {
root /etc/caddy
}
}
简单,如下:
ServiceAccount,我都放在了独立的 aura namespace 下面:---
apiVersion: v1
kind: Namespace
metadata:
name: aura
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: aura-role
namespace: aura
rules:
- apiGroups:
- ""
- "traefik.io"
- "metrics.k8s.io" # 这部分,是因为镜像添加了 metrics 信息显示
resources:
- "pods" # 同上
- "nodes" # 同上
- "ingressroutes"
verbs:
- "get"
- "list"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: aura-binding
namespace: aura
subjects:
- kind: ServiceAccount
name: aura-account
namespace: aura
roleRef:
kind: ClusterRole
name: aura-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: aura-account
namespace: aura
Deployment,配合这个 ServiceAccount:---
apiVersion: apps/v1
kind: Deployment
metadata:
name: aura
namespace: aura
labels:
app: aura
spec:
revisionHistoryLimit: 0
selector:
matchLabels:
app: aura
strategy:
type: Recreate
template:
metadata:
labels:
app: aura
spec:
serviceAccountName: aura-account
containers:
- image: springhack/aura:latest
imagePullPolicy: IfNotPresent
name: aura
ports:
- containerPort: 8000
name: aura
ingress 带有相应 annotations 就会被自动显示到首页上并按照 order 排序ingress controller 几乎可以不用改代码
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。