一、发布springboot服务
这里是个很简单的springboot应用拉取镜像上传到harbor仓库
//拉取镜像
docker pull openjdk:8u92-jdk-alpine
docker tag openjdk:8u92-jdk-alpine master128:8082/k8s/openjdk:8u92-jdk-alpine
//上传harbor仓库
docker push master128:8082/k8s/openjdk:8u92-jdk-alpine
编写dockerfile
cd /usr/k8sDemo/demo1
vim Dockerfile
From master128:8082/k8s/openjdk:8u92-jdk-alpine
COPY springbootdemo-0.0.1-SNAPSHOT.jar /springbootdemo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","/springbootdemo-0.0.1-SNAPSHOT.jar"]
构建镜像
docker build -t springbootdemo:v1 .
//查看镜像
docker images
docker tag springbootdemo:v0.46.0 master128:8082
//上传镜像到harbor
docker push master128:8082/k8s/springbootdemo:v1
运行镜像
docker run -it springbootdemo:v1
编写k8s配置文件,并且配置ingress
vim springbootdemo.yaml
#创建namespace
apiVersion: v1
kind: Namespace
metadata:
name: ingress-demo
---
#nodePort的方式
apiVersion: v1
kind: Service
metadata:
name: sbd-nsvc
namespace: ingress-demo
spec:
type: NodePort
ports:
- port: 80
targetPort: 8083
selector:
app: spring-boot-demo
---
#使用Deployment创建pods
apiVersion: apps/v1
kind: Deployment #对象类型
metadata:
name: spring-boot-demo
namespace: ingress-demo
labels:
app: spring-boot-demo
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-demo
template:
metadata:
labels:
app: spring-boot-demo
spec:
containers: #容器
- name: spring-boot-demo
image: master128:8082/k8s/springbootdemo:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8083 #这个端口对应我们项目配置文件里的端口
---
apiVersion: v1
kind: Service
metadata:
name: sbd-svc
namespace: ingress-demo
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8083 #对应容器的端口
selector:
app: spring-boot-demo #对应Deployment的标签
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: sbd-ing
namespace: ingress-demo
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ingress.demo.com #域名
http:
paths:
- path: /
backend:
serviceName: sbd-svc #对应Service的名字
servicePort: 80 #对应Service的端口
执行配置文件
kubectl apply -f springbootdemo.yaml
发生的错误及解决办法:
查看pod的情况,这里我没有启动成功,查看详细信息,原来是k8s没有与私有仓库认证
kubectl get pods -n ingress-demo -o wide
kubectl describe pod spring-boot-demo-7dff46b6f9-mbvn9 -n ingress-demo
创建harbor与k8s的认证
kubectl create secret docker-registry ingressharbor --namespace=default --docker-server=master128:8082 --docker-username=admin --docker-password=123456
删除创建的各种资源
kubectl delete Ingress spring-boot-demo-ingress -n ingress-demo
kubectl delete service spring-boot-demo -n ingress-demo
kubectl delete Deployment spring-boot-demo -n ingress-demo
#或者直接删除namespace
kubectl delete namespace ingress-demo
重新执行文件
kubectl apply -f springbootdemo.yaml
查看ingress-demo下的服务
kubectl get svc -n ingress-demo
nodePort的方式访问,响应成功
custerip的方式访问,响应成功
Ingress 的访问方式
首先配置ingress的pod所在node的ip与域名绑定
kubectl get pods -n ingress-nginx -o wide
网友评论