【K8S】Service使用NodePort对外暴露应用

一、背景介绍

Pod是有生命周期的,当一个工作节点(node)销毁时,节点上运行的pods也会被销毁。ReplicationController会动态地在其他节点上创建Pod来保持应用程序的运行,每一个Pod都有一个独立的IP地址,甚至是同一个节点上的Pod。可以看出Pod的IP是动态的,它随Pod的创建而创建,随Pod的销毁而消失,这就引出一个问题:如果由一组Pods组合而成的集群来提供服务,那如何访问这些Pods呢?

Kubenetes的Service就是用来解决这个问题的。一个Service可以看作一组提供相同服务的Pods的对外访问接口,Service作用于哪些Pods是通过label selector来定义的,这些Pods能被Service访问,Pod之间的发现和路由(如应用中的前端和后端组件)由Kubernetes Service处理。

Service有四种type:

  • ClusterIP(默认)
  • NodePort
  • LoadBalancer
  • ExternalName

其中NodePort和LoadBalancer两类型的Services可以对外提供服务。

二、基于NodePort配置对外暴露服务

NodePort:对外暴露应用(集群外)。在每个节点上启用一个端口来暴露服务,可以在集群外部访问。

2.1 创建service.yaml

示例代码:

---
# service
apiVersion: v1
kind: Service
metadata:
  name: web-service
  namespace: web-space
spec:
  selector:
    app: web  # 指定关联Pod的标签
  type: NodePort  # 这里代表是NodePort类型
  ports:
    - port: 8080    # Service端口,供内部访问(和clusterIP对应,即ip:8080)
      protocol: TCP  # TCP协议
      targetPort: 8080  # 容器端口
      nodePort: 30001    # 对外暴露的端口,供外部调用

示例图片:
【K8S】Service使用NodePort对外暴露应用_第1张图片

2.2 应用yaml

kubectl create -f service.yaml

参考资料

  • k8s学习(四) k8s使用nodeport方式配置service对外暴露服务
  • k8s service使用NodePort对外暴露应用

你可能感兴趣的:(K8S,kubernetes,容器,云原生)