k3s 搭建使用指南
参考资料
k8s入门教程:
k8s的官网
https://zhuanlan.zhihu.com/p/584076089
云上测试工具:
github.com/cdk-team/CDK
kubernets 靶场:
kubernetes-goat
搭建思路
1.写个镜像dockerfile/docker-compose,本地测试通过后->转pod
2.如果需要暴露端口/挂载文件,则写个deployment
3.如果需要外部访问,写个service
4.如果需要实现代理转发功能(如子域名自动解析对应服务),则写个ingress
5.如果需要实现权限管理,则写个角色访问控制(这个我也玩不明白)
pod
pod示例
类似于这样,可以创建一个alist服务
apiVersion: v1
kind: Pod
metadata:
name: alist
spec:
containers:
- name: alist
image: xhofe/alist:latest
env:
#- PUID=0
- name: PGID
value: "0"
#- PGID=0
- name: PGID
value: "0"
#- UMASK=022
- name: UMASK
value: "022"
ports:
- containerPort: 5244
containers里面的内容基本上就等于你dockerfile的内容
deployment
deployment示例
这里从功能上看,多了个挂载
apiVersion: apps/v1
kind: Deployment
metadata:
name: alist-service
spec:
selector:
matchLabels:
app: alist
replicas: 1
template:
metadata:
labels:
app: alist
spec:
containers:
- name: alist
image: xhofe/alist:latest
env:
#- PUID=0
- name: PUID
value: "0"
#- PGID=0
- name: PGID
value: "0"
#- UMASK=022
- name: UMASK
value: "022"
ports:
- containerPort: 5244
volumeMounts:
- mountPath: /etc/alist
name: src
volumes:
- name: src
hostPath:
path: /home/thai/docker_service/alist/data
service
这里多了个外部网络/端口暴露
apiVersion: v1
kind: Service
metadata:
name: alist-service
spec:
selector:
app: alist
loadBalancerIP: 192.168.239.22 #外部ip
ports:
- name: http
port: 5244 #外部端口
targetPort: 5244 #对应pod中开启的端口
# type: ClusterIP
type: LoadBalancer
ingress
首先去域名解析那里添加自己的解析纪录
把A解析纪录指向自己k3s的ip
xxx.yourdomain.com
*.xxx.yourdomain.com
#添加上以上两个
ingress配置示例如下
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: alist.mi3aka.viewofthai.link # 子域名1
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: alist-service # 替换为您的服务名称
port:
number: 5244
- host: hedge.mi3aka.viewofthai.link # 子域名2
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hedgedoc-service # 替换为您的服务名称
port:
number: 80
访问控制
这块比较复杂,笔者也没完全明白
只知道里面的权限是由用户和命名空间决定的
一些坑
多容器连接问题
比如说hedge需要一个数据库
wordpress静态ip问题
总所周知wordpress的url是静态的
第一次创建wordpress时,url为初次访问的url,当然可以进入后台修改
在这里
但是假如把容器创建好,后续需要对Url进行一些更改(如添加一个通过子域名访问 ,比如 a.xxx.com),在这里进行修改,会发现虽然可以访问,但是:
1.很大一部分图片加载不出来,显示的仍然是旧的url/url+port
2.有些界面跳转的时候仍然会改变url/url+port
解决方法是:
- 针对url+port的问题,也就是说咱们原本是ip:1988可以访问到容器,但是ingress添加了a.xxx.com解析到ip:1988,直接访问a.xxx.com却会出现加载某些a.xxx.com:1988的情况,那么当时暴露端口的时候,应该都设置为80端口,比如说红框上面的port:8083应该改为80
但其实不这么设置也可以
- 有些界面跳转的时候仍然会改变url/url+port
(有时候你设置完80端口后,你会发现没有这种问题了,但是我要是就不设置80端口呢,可以这样解决:)
这个就是咱在后台修改完静态url后(a.xxx.com)
还需要进数据库修改
1.wp_users 这个表的 user_url 需要修改
2.wp_options 表的 option_name == siteurl 或者 option_name == home的option_value 需要修改