一、发布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 


