kubernetes 部署 ingress-nginx

本文所使用的配置文件,在GiHub项目中 https://github.com/aidansu/kubernetes-kubeadm-install
Kubernetes 版本为 1.14

获取配置文件

这里已经整合了配置文件 位于配置文件/addons/mandatory.yaml 以下内容需要注意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下面的 nodeSelector 为pod定向调度配置 表明只会运行在带有 app=ingress 标签的node节点上 如果所有node节点都不带有此标签 则会一直处于pending状态
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress-controller
...
template:
spec:
nodeSelector:
app: ingress
...
# 对node添加标签
$ kubectl label node <node-name> app=ingress
# 去除一个标签 结尾为减号
$ kubectl label node <node-name> app-

使用命令部署 ingress-nginx

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
# 使用 kubectl apply -f 命令 根据配置文件部署服务
$ kubectl apply -f /etc/kubernetes/addons/mandatory.yaml
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.apps/nginx-ingress-controller created
deployment.apps/default-http-backend created
service/default-http-backend created
# 查看 pod 以及 service , default-http-backend为默认转发路径 如访问路径错误或者不存在时 将转发至default-http-backend返回404
$ kubectl get pods -A -owide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx default-http-backend-b9b8568b7-44w9x 1/1 Running 0 13s 10.32.0.3 worker1 <none> <none>
ingress-nginx nginx-ingress-controller-5cb96fb994-k6zg9 1/1 Running 0 14s 192.168.43.5 worker2 <none> <none>
# 查看 service
$ kubectl get svc -A -owide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
ingress-nginx default-http-backend ClusterIP 10.109.98.167 <none> 80/TCP 7m29s app=default-http-backend

部署应用 进行测试

通过tomcat.aidansu.com访问worker下的tomcat服务

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
## 编写 YML配置文件
tomcat-ingress.yaml
# Deployment控制器
apiVersion: apps/v1
kind: Deployment
metadata:
# 控制器名称
name: tomcat
spec:
selector:
matchLabels:
ingress-app: tomcat
# 副本数量
replicas: 1
template:
metadata:
labels:
ingress-app: tomcat
spec:
containers:
- name: tomcat
# 镜像仓库地址
image: reg.aidansu.com/library/tomcat:9.0.29
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
# 服务
apiVersion: v1
kind: Service
metadata:
name: tomcat
labels:
app: tomcat
spec:
ports:
- port: 8080
targetPort: 8080
nodePort: 30080
protocol: TCP
name: http
selector:
ingress-app: tomcat
sessionAffinity: ClientIP
type: NodePort
---
# Ingress反向代理
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tomcat
spec:
rules:
# 服务入口的host 对应IP为 nginx-ingress-controller 所在的nodeIP
- host: tomcat.aidansu.com
http:
paths:
# 根据不同的路径转发至不同的服务 可写多个
- path: /
backend:
serviceName: tomcat
servicePort: 8080

运行命令 构建服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ kubectl apply -f /etc/kubernetes/addons/tomcat-ingress.yaml
deployment.apps/tomcat created
service/tomcat created
ingress.extensions/tomcat created
# 清除服务时 使用 kubectl delete -f <fileName>命令
$ kubectl delete -f /etc/kubernetes/addons/tomcat-ingress.yaml
# 使用一台可以访问到集群的设备 添加hosts
<node-ip> tomcat.aidansu.com
# 测试访问服务下的/show方法
$ curl tomcat.aidansu.com

坚持原创技术分享,您的支持将鼓励我继续创作!