k8s部署应用nginx

几个kubernetes知识点

  • pods = pod+pod+pod+···
  • 每个pod在工作节点(worker)上,并且每个pod在全局k8s集群中有唯一的IP地址,此IP是k8s集群内部控制生成的虚拟IP,外网是无法ping通pod的ip
  • 一个pod可以有多个(>=1)容器,但是单个pod内部的容器之间对外开放的端口号必须唯一,因为pod内部的容器之间可以通过localhost直接访问
  • 如果外网需要访问pod内部的容器服务,那么就需要k8s建立一组网络服务映射,连接内外部网络。

使用k8s部署nginx并外网访问

1. 写在前面:自己的k8s集群信息

  • 共两台linux,master为集群管理角色,worker为集群实际工作角色
  • master:192.168.192.131
  • worker:192.168.192.131、192.168.192.132

2. 创建namespase.yaml

apiVersion: v1 #类型为Namespace
kind: Namespace  #类型为Namespace
metadata:
  name: ssx  #命名空间名称
  labels:
    name: ssx  

kubectl create -f namespase.yaml
kubectl get namespace

3.创建deployment.yaml 创建service.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx #为该Deployment设置key为app,value为nginx的标签
  name: ssx-nginx-dm
  namespace: ssx
spec:
  replicas: 1
  selector: #标签选择器,与上面的标签共同作用
    matchLabels:
      app: nginx #选择包含标签app:nginx的资源
  template:  #这是选择或创建的Pod的模板
    metadata: #Pod的元数据
      labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: nginx
    spec: #期望Pod实现的功能(即在pod中部署)
      containers: #生成container,与docker中的container是同一种
        - image: 'node102:5000/ssx-nginx:v1.0'
          imagePullPolicy: IfNotPresent
          name: ssx-nginx-c
          ports:
            - containerPort: 80 # 开启本容器的80端口可访问
            - containerPort: 81 # 开启本容器的81端口可访问
            - containerPort: 82
            - containerPort: 83
            - containerPort: 85
            - containerPort: 86
            - containerPort: 87
            - containerPort: 88
            - containerPort: 89
            - containerPort: 91
            - containerPort: 92
            - containerPort: 93
            - containerPort: 94
          volumeMounts:
            - mountPath: /etc/localtime
              name: c-v-path
            - mountPath: /etc/nginx/conf.d
              name: c-v-path-ng
      hostAliases:
        - hostnames:
            - node101
          ip: 192.168.0.101
        - hostnames:
            - node102
          ip: 192.168.0.102
        - hostnames:
            - node103
          ip: 192.168.0.103
      nodeSelector:
        kubernetes.io/hostname: node101
      restartPolicy: Always
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: c-v-path
        - hostPath:
            path: /home/app/apps/k8s/for_docker_volume/nginx
            type: ''
          name: c-v-path-ng

---

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: ssx-nginx-sv
  namespace: ssx
spec:
  externalTrafficPolicy: Local #仅当pod和service在同一台物理机,用于获取用户IP
  ports:
    - name: ssx-nginx-last80
      nodePort: 31080 #外网访问的端口
      port: 9080
      protocol: TCP
      targetPort: 80 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last81
      nodePort: 31081 #外网访问的端口
      port: 9081
      protocol: TCP
      targetPort: 81 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last82
      nodePort: 31082 #外网访问的端口
      port: 9082
      protocol: TCP
      targetPort: 82 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last83
      nodePort: 31083 #外网访问的端口
      port: 9083
      protocol: TCP
      targetPort: 83 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last84
      nodePort: 31084 #外网访问的端口
      port: 9084
      protocol: TCP
      targetPort: 84 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last85
      nodePort: 31085 #外网访问的端口
      port: 9085
      protocol: TCP
      targetPort: 85 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last86
      nodePort: 31086 #外网访问的端口
      port: 9086
      protocol: TCP
      targetPort: 86 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last87
      nodePort: 31087 #外网访问的端口
      port: 9087
      protocol: TCP
      targetPort: 87 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last88
      nodePort: 31088 #外网访问的端口
      port: 9088
      protocol: TCP
      targetPort: 88 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last89
      nodePort: 31089 #外网访问的端口
      port: 9089
      protocol: TCP
      targetPort: 89 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last91
      nodePort: 31091 #外网访问的端口
      port: 9091
      protocol: TCP
      targetPort: 91 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last92
      nodePort: 31092 #外网访问的端口
      port: 9092
      protocol: TCP
      targetPort: 92 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last93
      nodePort: 31093 #外网访问的端口
      port: 9093
      protocol: TCP
      targetPort: 93 # 容器nginx对外开放的端口 上面的dm已经指定了
    - name: ssx-nginx-last94
      nodePort: 31094 #外网访问的端口
      port: 9094
      protocol: TCP
      targetPort: 94 # 容器nginx对外开放的端口 上面的dm已经指定了
  selector:
    app: nginx
  type: NodePort


  • 查询ssx-nginx-ns命名空间下的pods
    kubectl get pods -n ssx -o wide
    [root@node131 ~]# kubectl get pods -n ssx -o wide
    	NAME                            READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
    	ssx-nginx-dm-76ddccf49c-65d82   1/1     Running   0          10m   10.234.240.29   node131   <none>           <none>
    	ssx-nginx-dm-76ddccf49c-lwtls   1/1     Running   0          10m   10.234.4.45     node132   <none>           <none>
    
  • 此时查询集群的pods:新增一个ssx-nginx-dm,并且该pod的ip地址是10.234.x.x
    并且外网无法访问nginx服务,但是同一个pod中的其他容器可以通过localhost:80来访问nginx

5. 在外网打开浏览器 http://192.168.192.132:31090

即可实现访问nginx


end

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为云提供了Kubernetes***可以方便地部署和管理容器化应用程序。下面是在华为云K8s部署Nginx的步骤: 1. 登录华为云控制台,选择对应的区域和项目。 2. 在左侧导航栏中选择“容器引擎服务”>“容器服务”。 3. 在容器服务页面,点击“创建集群”按钮。 4. 在创建集群页面,选择合适的集群类型和规格,并设置相关参数,如集群名称、VPC网络等。点击“下一步”。 5. 在节点配置页面,设置节点数量、节点规格等参数。点击“下一步”。 6. 在高级配置页面,可以设置其他高级参数,如自动伸缩、网络策略等。点击“下一步”。 7. 在确认订单页面,确认配置信息无误后,点击“创建集群”按钮。 8. 等待集群创建完成后,在集群列表中找到刚创建的集群,点击“管理”按钮。 9. 在集群详情页面,点击“部署应用”按钮。 10. 在部署应用页面,选择“应用商店”选项卡,搜索并选择“Nginx应用。 11. 在Nginx应用详情页面,点击“部署”按钮。 12. 在部署参数页面,设置相关参数,如副本数、端口等。点击“下一步”。 13. 在高级配置页面,可以设置其他高级参数,如环境变量、存储卷等。点击“下一步”。 14. 在确认订单页面,确认配置信息无误后,点击“创建”按钮。 15. 等待应用部署完成后,在应用列表中找到刚部署Nginx应用,可以查看相关信息和访问地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值