利用hostNetwork方式部署ingress controller
下载ingress controller的yaml文件
https://files.cnblogs.com/files/edward-han/mandatory.zip
下载mandatory.yaml文件中的镜像(所有要运行ingress的node都要下载安装以下这些镜像)
# docker tag registry.cn-hangzhou.aliyuncs.com/liuyi01/defaultbackend-amd64:1.5 k8s.gcr.io/defaultbackend-amd64:1.5
# docker pull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.19.0
修改 mandatory.yaml,以hostnetwork方式部署ingress,并且添加一个节点选择器,可以控制在哪个节点上生成ingress
(给节点打标签:# kubectl label node node1 app=ingress)
执行yaml文件
# kubectl apply -f mandatory.yaml
查看
# kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/default-http-backend-6bf4c44778-jvzw5 1/1 Running 0 38m
pod/nginx-ingress-controller-7c645c9879-hqpct 1/1 Running 0 21m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/default-http-backend ClusterIP 10.97.51.114 <none> 80/TCP 38m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/default-http-backend 1/1 1 1 38m
deployment.apps/nginx-ingress-controller 1/1 1 1 21m
NAME DESIRED CURRENT READY AGE
replicaset.apps/default-http-backend-6bf4c44778 1 1 1 38m
replicaset.apps/nginx-ingress-controller-7c645c9879 1 1 1 21m
测试:
提供了一份测试源码
在源码目录springboot-web-demo下给代码打包
mvn package
将target目录下的springboot-web-demo-1.0-SNAPSHOT.jar文件拷贝至master
在master中编写dockerfile (基础镜像openjdk:8-jre-alpine可在docker hub上下载,并打好tag上传至harbor)
# vim dockerfile
FROM harbor.edward.net/baseimages/openjdk:8-jre-alpine
COPY springboot-web-demo-1.0-SNAPSHOT.jar /springboot-web.jar
ENTRYPOINT ["java","-jar","/springboot-web.jar"]
build镜像
# docker build -t springboot-web:v1 .
运行镜像测试
# docker run -it springboot-web:v1
给镜像打tag
# docker tag springboot-web:v1 harbor.edward.net/springboot/springboot-web:v1
将镜像push到harbor
docker push harbor.edward.net/springboot/springboot-web:v1
编写yaml文件
# vim springboot-web.yaml
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-web-demo
spec:
selector:
matchLabels:
app: springboot-web-demo
replicas: 1
template:
metadata:
labels:
app: springboot-web-demo
spec:
containers:
- name: springboot-web-demo
image: harbor.edward.net/springboot/springboot-web:v1
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: springboot-web-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: springboot-web-demo
type: ClusterIP
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: springboot-web-demo
spec:
rules:
- host: springboot.com
http:
paths:
- path: /
backend:
serviceName: springboot-web-demo
servicePort: 80
执行yaml文件
# kubectl apply -f springboot-web.yaml
查看pod
# kubectl get pods -o wide
在客户端电脑配置host文件(ip地址可以是任意一个可运行ingress的node节点的ip)
192.168.101.110 springboot.com
浏览器访问
Hello Edward! I'm springboot-web-demo controller![root@node1 ~]#
测试成功!!!!