k8s集群部署nginx服务以及外网访问nginx服务
1、查看k8s进群状态
[root@k8s-master test]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master Ready master 16d v1.15.1 k8s-node1 Ready <none> 16d v1.15.1
2、编写nginx服务yaml文件
kind: Namespace apiVersion: v1 metadata: name: myserver #创建namespace --- kind: Deployment apiVersion: apps/v1 #可查询它的api版本 kubectl explain deployment.apiVersion metadata: #定义pod元数据信息,可查询它的下级子字段kubectl explain deployment.metadata labels: #定义deployment控制器标签 app: nginx-deployment-label #标签名称以键值形式定义,可以定义多个,这里标签是app值为nginx-deployment-label name: nginx-deployment #deployment资源的名字 namespace: myserver #deployment所属的namespace,默认是defaule spec: #定义Deployment中容器的详细信息,可通过kubectl explain deployment.spec查询 replicas: 1 #定义创建出pod的副本数,默认值是1个pod selector: #定义标签选择器,它跟上面的Deployment标签不是一回事,它是找下面template中定义的labels标签 matchLabels: #定义匹配的标签,必须要设置 app: nginx-selector #匹配的目标标签,控制器会拿这个标签匹配下面的pod template: #定义模板,用来描述需要创建的pod作用 metadata: #定义模板元数据 labels: #这个labels会继承给这个yaml文件Deployment控制器创建的所有pod app: nginx-selector #这个labels的key是app,值是nginx-selector,它会继承给下面的pod,和上面matchLabels.app: nginx-selector一样 spec: #定义pod的详细信息 containers: #定义pod中容器列表,可以定义多个pod - name: nginx-container #容器名称 image: nginx:1.20 #容器镜像 imagePullPolicy: Always #镜像拉取策略 ports: #定义容器端口列表 - containerPort: 80 #定义一个端口 protocol: TCP #定义协议 name: http #端口名称 - containerPort: 443 protocol: TCP name: https env: #给容器传递环境变量 - name: "password" #变量名称,必须引号引起来 value: "123" #上面变量的值 - name: "age" value: "18" --- kind: Service apiVersion: v1 metadata: name: nginx-service labels: app: nginx-service-label #service资源的标签 namespace: myserver #所在的命名空间,与上面控制器必须在同一个命名空间 spec: type: NodePort #service类型是NodePort ports: #定义访问端口,一个service可以定义多个端口的映射关系 - name: http #定义协议名称 port: 80 #定义service端口,它可以和pod,node端口都不同,它是K8S中一个独立子网 protocol: TCP #定义类型 targetPort: 80 #目标pod端口,当访问宿主机30004端口时就会转达到pod的80端口 nodePort: 30004 #手动指定node节点暴露的端口,如果没有指定端口,那service会随机分配一个端口 - name: https port: 443 protocol: TCP targetPort: 443 nodePort: 30443 selector: app: nginx-selector #这个标签就是上面pod的标签,service通过这个标签来匹配对应的pod
3、运行nginx服务yaml文件
kubectl apply -f nginx.yaml
4、查看namespace信息
[root@k8s-master ~]# kubectl get ns | grep myserver myserver Active 49m
5、查看service信息
[root@k8s-master ~]# kubectl get svc -A | grep nginx myserver nginx-service NodePort 10.106.253.198 <none> 80:30004/TCP,443:30443/TCP 50m
6、查看pod信息
[root@k8s-master ~]# kubectl get pod -A | grep nginx myserver nginx-deployment-68f5647649-bhbhq 1/1 Running 0 50m
7、访问nginx服务