k8s集群部署nginx服务以及外网访问nginx服务

发布时间 2023-12-01 16:31:02作者: 张小爽

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服务