Kubernetes Ingress 服务

Ingress服务具体概念请阅读官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/

安装部署nginx-ingress

官方的Nginx-ingress对k8s是有版本要求的,注意选择适合你的版本:

1
https://github.com/kubernetes/ingress-nginx

image-20221002235609833

可以直接使用kubernetes官方自带的nginx-ingress控制清单来部署

1
2
3
4
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controllerv1.3.0/
deploy/static/provider/kind/deploy.yaml -O nginx-ingress-v1.3.0.yaml
# 上面下载不了就访问下面的链接
https://github.com/kubernetes/ingress-nginx/archive/refs/tags/controllerv1.3.0.tar.gz

修改deploy.yaml镜像源为国内地址

image-20221003163804925

image-20221003163828860

1
2
3
4
5
6
---439行
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.3.0
---546行
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubewebhook-certgen:v1.1.1
---595行
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubewebhook-certgen:v1.1.1

node节点增加标签

1
kubectl label nodes node1 ingress-ready=true

应用资源配置

1
kubectl apply -f deploy.yaml

查看创建的资源

1
kubectl -n ingress-nginx get all

image-20221003161445687

创建测试的服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
app: my-nginx
spec:
ports:
- port: 80
protocol: TCP
name: http
selector:
app: my-nginx
1
kubectl apply -f my-nginx.yaml

创建Ingress规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-nginx
namespace: default
spec:
ingressClassName: nginx
rules:
- host: nginx.k8s.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: my-nginx
port:
number: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-nginx
namespace: default
spec:
ingressClassName: nginx # 匹配ingress类型为nginx
rules: # 转发规则
- host: nginx.k8s.com # 匹配的域名
http: # 基于http协议解析
paths: # 基于路径进行匹配
- path: / # 匹配/路径
pathType: ImplementationSpecific # 路径类型
backend: # 匹配后跳转的后端服务
service: # 设置后端跳转到Service的配置
name: my-nginx # 跳转到名为my-nginx的clusterIP
port: # 跳转到的端口
number: 80 # Service端口号
1
kubectl apply -f my-nginx-ingress.yaml

pathType路径类型支持的类型:

1
2
3
ImplementationSpecific # 系统默认,由IngressClass控制器提供
Exact # 精确匹配URL路径,区分大小写
Prefix # 匹配URL路径的前缀,区分大小写

访问测试

1
2
# windows、mac本地hosts添加解析
172.16.32.145 nginx.k8s.com

image-20221003162647938