该系统主要有三个部分,nginx静态页面、jar包应用、mysql数据库。K8S集群有三台,106 master 107/108为 node

kubernetes nfs sotrageClass配置 kubernetes nodeport_docker

一. 端口分类

PORT分类
对网上相关材料进行了搜集整合(仅用作学习,如需删除,可私信)

port

是service端口,即k8s中服务之间的访问端口.service暴露在cluster ip上的端口,clusterIP:port 是提供给集群内部客户访问service的入口

targetport

是pod(也就是容器)的端口;targetPort是pod上的端口。从port和nodePort上来的数据,经过kube-proxy流入到后端pod上的targetPort,最终进入容器

nodePort

首先,nodePort是kubernetes提供给集群外部客户访问service入口的一种方式(另一种方式是LoadBalancer)。是容器所在node节点的端口,即外部机器可访问的端口。(通过nodeport类型的service暴露给集群节点)。所以,nodeIP:nodePort 是提供给集群外部客户访问service的入口

apiVersion: v1
kind: Service
metadata:
 name: nio4444-service
spec:
 type: NodePort         // 有配置NodePort,外部流量可访问k8s中的服务
 ports:
 - port: 30080          // k8s内部服务访使用
   targetPort: 80       // pod容器使用端口
   nodePort: 30001      // NodePort,给外部访问使用
 selector:
  name: nginx-pod

containerPort

containerPort是pod内部容器的端口,targetPort映射到containerPort。containerPort 定义了应用程序可以在容器内访问的端口。 注意它是定义的容器内的端口。是在pod控制器中定义的,pod中的容器需要暴露的端口。

kubernetes nfs sotrageClass配置 kubernetes nodeport_运维_02

port、nodePort:总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod中的容器

kubernetes nfs sotrageClass配置 kubernetes nodeport_bc_03

hostPort

类似docker -p 参数做的端口映射,将容器内端口映射到宿主机上(hostPort),在k8s中,这是一种直接定义Pod网络的方式。
hostPort是直接将容器的端口与所调度的节点上的端口路由,这样用户就可以通过宿主机的IP加上来访问Pod了

hostPort:

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
    - name: tomcat
    image: tomcat:8.5
    ports:
      - hostPort: 8081
        containerPort: 8080
        protocol: TCP

二、Nginx静态页面

主要有三个文件:namespace.yml deployment.yml service.yml

创建命名空间

kubctl create -f namespace.yml

kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_04


kubctl create -f deployment.yml 如果是离线的话,最好保证每个slave的机器内都有对应的镜像文件。

设置imagePullPolicy:Never 即可从本地拉取镜像,要不然会从联网仓库中拉取。

kubernetes nfs sotrageClass配置 kubernetes nodeport_bc_05

kubctl create -f service.yml 对外进行服务

kubernetes nfs sotrageClass配置 kubernetes nodeport_运维_06

发现slave上已有两个pod。 默认情况下会优先分配给清闲的节点上运行,而且大概率都会运行在同一个节点上。

此对外服务的网络是flannel,type为nodeport而非(clusterip),所以虽然运行在04节点上,但是在浏览器也可通过03访问,如下图。nodeport范围为:30000~32767

kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_07


kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_08


前端即可显示正常页面

kubernetes nfs sotrageClass配置 kubernetes nodeport_kubernetes_09


service之ClusterIP(内网ip),暴露集群IP和端口号,解决IP随Pod变化的问题
service之NodePort(外网ip),暴露NodePort类型,解决集群外无法访问的问题

如果使用clusterIP,只可内部访问,如将上面的service.yml文件更改clusterip,也需将nodeport注释,重新deployment和service

kubctl delete/create -f deployment.yml

kubctl delete/create -f service.yml

kubernetes nfs sotrageClass配置 kubernetes nodeport_kubernetes_10

kubernetes nfs sotrageClass配置 kubernetes nodeport_docker_11

三、Jar包

因为内网测试,需要在两个node创建jar包镜像

创建dockerfile.yml文件

kubernetes nfs sotrageClass配置 kubernetes nodeport_运维_12

构建镜像

docker build -t jeecg-boot:V1.0.1 .

kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_13


master上创建deployment 和service文件

kubernetes nfs sotrageClass配置 kubernetes nodeport_docker_14


在jar包传入链接数据库的密码,采用env的方式传参。

kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_15


jar采用clusterIP 的方式,services如下图

kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_16


matste节点:针对nginx的deployment文件进行修改,挂载conf 文件及html。

kubernetes nfs sotrageClass配置 kubernetes nodeport_nginx_17


node节点:针对nginx.conf的配置文件进行修改,图中proxy_pass 为了测试就简单写了ip,可以使用svr.namespace:port方式。

kubernetes nfs sotrageClass配置 kubernetes nodeport_运维_18

最终验证功能正常

kubernetes nfs sotrageClass配置 kubernetes nodeport_bc_19