构建
2024年11月13日
一、认识
二、操作
2.1 部署 Service
1. 创建两个 Service
和 Deployment
: 用来模拟分别使用两个路径访问不同内容
apiVersion: v1
kind: Service
metadata:
name: web1
labels:
app: web1
spec:
selector:
app: web1
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web2
labels:
app: web2
spec:
selector:
app: web2
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web1
spec:
replicas: 2
selector:
matchLabels:
app: web1
template:
metadata:
labels:
app: web1
spec:
containers:
- name: web1
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web2
spec:
replicas: 2
selector:
matchLabels:
app: web2
template:
metadata:
labels:
app: web2
spec:
containers:
- name: web2
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:1.27.1-perl-linux-arm64
ports:
- containerPort: 80
2. 应用配置
kubectl apply -f app.yaml
3. 验证服务和 Pod
是否启动成功
kubectl get pods,svc
2.2 安装 Controller
Kubernetes
需要一个 Ingress Controller
来解析和实现 Ingress
规则。常见的 Ingress Controller
:
-
Traefik
-
HAProxy
-
NGINX Ingress Controller
1. 使用 YAML
安装 NGINX Ingress Controller
: 下载 yaml
部署文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/cloud/deploy.yaml
2. 下载并上传所需镜像: 在可科学上网的机器上下载 arm64
镜像,并上传到阿里云个人镜像仓库。
# 1. ingress-nginx/controller
docker pull --platform linux/arm64 registry.k8s.io/ingress-nginx/controller:v1.5.1
docker inspect registry.k8s.io/ingress-nginx/controller:v1.5.1 | grep Architecture
docker tag registry.k8s.io/ingress-nginx/controller:v1.5.1 registry.cn-hangzhou.aliyuncs.com/bolawen/ingress-nginx-controller:v1.5.1-linux-arm64
docker push registry.cn-hangzhou.aliyuncs.com/bolawen/ingress-nginx-controller:v1.5.1-linux-arm64
# 2. ingress-nginx/kube-webhook-certgen
docker pull --platform linux/arm64 registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343
docker inspect registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343 | grep Architecture
docker tag registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20220916-gd32f8c343 registry.cn-hangzhou.aliyuncs.com/bolawen/ingress-nginxkube-webhook-certgen:v20220916-gd32f8c343
docker push registry.cn-hangzhou.aliyuncs.com/bolawen/ingress-nginxkube-webhook-certgen:v20220916-gd32f8c343
3. 修改 deploy.yaml
配置文件
# 1. 搜索 images 替换镜像
# 2. 把 LoadBalancer 修改成 NodePort
# 3. 去掉 dnsPolicy: ClusterFirst, 在下面添加
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
4. 应用 deploy.yaml
配置文件
# 安装
kubectl apply -f deploy.yaml
# 如需删除
kubectl delete -f deploy.yaml
# 如需强制删除
kubectl delete pod -n ingress-nginx --all --grace-period=0 --force
5. 验证 ingress-nginx
状态
# 1. 检查 ingress-nginx 控制器的 Pods 状态
kubectl get pods -n ingress-nginx
kubectl get svc -n ingress-nginx
# 2. 查看 ingress-nginx 控制器的 Pods 日志
kubectl describe pod -n ingress-nginx <PodName>
2.3 编写 Ingress 文件
创建 Ingress
配置 创建 ingress.yaml
文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my-app.local
http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2
port:
number: 80
2.4 部署 Ingress 服务
kubectl apply -f ingress.yaml
2.5 验证 Ingress 服务
kubectl get ingress
2.6 测试 Ingress 服务
1. 编辑 /etc/hosts
: 添加以下条目,将 my-app.local
指向集群的外部 IP
地址:
<CLUSTER-EXTERNAL-IP> my-app.local
2. 访问如下路径测试
http://my-app.local/web1
http://my-app.local/web2