Kubernates之ingress方式部署springboot
阿新 • • 發佈:2019-04-24
部署一個簡單的springboot服務,有個restful介面,如下:
List-1
mjduan@mjduan-host:/opt/software/tool/virtualbox-vagrant/master$ curl http://192.168.33.10:30002/person/1
{"id":1,"name":"name=1","address":"address"}
mjduan@mjduan-host:/opt/software/tool/virtualbox-vagrant/master$
1、NodePort方式暴露埠
我們將這個springboot部署到k8s上,製作映象就不描述了,k8s的yaml檔案如下,之後執行"kubectl apply -f k8s-demo.yaml",就可以了。
List-1.1 k8s-demo.yaml
apiVersion: v1 kind: Service metadata: name: k8s-learn-service namespace: default labels: app: k8s-learn-service spec: type: NodePort ports: - port: 8080 nodePort: 30002 selector: app: k8s-learn-service --- apiVersion: apps/v1 kind: Deployment metadata: name: k8s-learn-deployment labels: app: k8s-learn-deployment spec: replicas: 1 selector: matchLabels: app: k8s-learn-service template: metadata: labels: app: k8s-learn-service spec: containers: - name: k8s-learn-container1 image: k8s-learn:1.0 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 volumeMounts: - mountPath : /opt/applog name: my-volume volumes: - name: my-volume emptyDir: {}
2、ClusterIP方式,用Ingress暴露埠
NodePort方式,是直接暴露埠,這種方式不是很好。ClusterIP方式,叢集外是訪問不了的,我們用Ingress方式來暴露埠,如下:
List-2.1 k8s-demo.yaml
apiVersion: v1 kind: Service metadata: name: k8s-learn-service namespace: default labels: app: k8s-learn-service spec: type: ClusterIP ports: - port: 8080 selector: app: k8s-learn-service --- apiVersion: apps/v1 kind: Deployment metadata: name: k8s-learn-deployment labels: app: k8s-learn-deployment spec: replicas: 1 selector: matchLabels: app: k8s-learn-service template: metadata: labels: app: k8s-learn-service spec: containers: - name: k8s-learn-container1 image: k8s-learn:1.0 imagePullPolicy: IfNotPresent ports: - containerPort: 8080 volumeMounts: - mountPath : /opt/applog name: my-volume volumes: - name: my-volume emptyDir: {}
之後執行"kubectl apply -f k8s-demo.yaml",之後檢視該服務:
List-2.2
[root@master springboot]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
...
k8s-learn-service ClusterIP 10.107.55.103 <none> 8080/TCP 3m
...
之後建立用於ingress,如下
List-2.3 springboot-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: apps-springboot
spec:
rules:
- host: springboot-ui
http:
paths:
- path: /
backend:
serviceName: k8s-learn-service
servicePort: 8080
執行"kubectl apply -f springboot-ingress.yaml ",檢視ingress狀態:
List-2.4
[root@master springboot]# kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
apps-springboot springboot-ui 80 17m
之後在你本地/etc/hosts中加入"k8s的任一節點IP springboot-ui",在瀏覽器中訪問"http://spr