跳到主要内容

构建

2024年11月13日
柏拉文
越努力,越幸运

一、认识


二、操作


2.1 部署 Service

1. 创建两个 ServiceDeployment: 用来模拟分别使用两个路径访问不同内容

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