首页  

k8s服务暴露     所属分类 k8s 浏览量 360
k8s暴露 Service 服务主要方式
ClusterIP NodePort LoadBalancer Ingress


ClusterIP 集群内部
NodePort LoadBalancer Ingress 对外暴露


ClusterIP 是默认的 Service 类型
ClusterIP 无法从外部访问,一般用于服务之间的内部网络

spec.metadata.type: ClusterIP 

apiVersion: v1
kind: Service
spec:
 metadata:
   name: demo-service
  selector:
    app: demo-app
  type: ClusterIP
  ports:
    - name: http
      port: 80
      targetPort: 8080
      protocol: TCP


到 ClusterIP 上端口 80 的流量将转发到 Pod 上的端口 8080  (targetPort),
携带 app: demo-app 标签的 Pod 将被添加到 Service 中作为作为服务的可用端点

kubectl get svc demo-app   查看该服务所分配 IP 地址

集群中的其他服务可以使用 IP:80 访问该服务 

spec.clusterIp  指定 IP 地址

spec:
  type: ClusterIP
  clusterIp: 110.110.110.110


NodePort 将 Service 设置成 NodePort 类型, 每个 Node 节点上开放同一固定端口 nodePort 向集群外部暴露服务,自动将端口流量路由到它所连接的服务。 在集群外部需要使用集群的 IP 地址和 NodePort 指定的端口访问 apiVersion: v1 kind: Service metaadata: name: demo-service spec: selector: app: demo-app # 容器标签 type: NodePort # 服务类型 ports: - name: http port: 80 # 服务端口号,供内部访问 targetPort: 8080 # 目标内部 Pod 端口,端口一定要和容器暴露出来的端口对应 nodePort: 30123 # 所有的节点都会开放此端口,此端口供外部调用。 protocol: TCP spec.ports.nodePort 指定 Node 节点对外开放访问的端口号, 如果不指定,随机选择一个端口号,默认范围30000-32767,手动指定端口也得在这个范围内 demo-app 为指定的 service 对象名称 port 指定集群内部访问的端口 targetPort 指定容器内服务的统一端口 缺点 NodePort 没有负载均衡的能力,并且会在每个节点上开启端口,服务越多端口号对外暴露的就越多,会造成安全风险,且难以维护。
LoadBalancer NodePort 所有节点都开放同一固定端口,直接给外部访问,并没有 负载均衡。 LoadBalancer 增加负载均衡器,只提供一个公网 ip 给外部访问,外部访问这个 ip 再负载均衡分发给 Node 节点的 Pod 。 依赖云提供商 apiVersion: v1 kind: Service metadata: name: demo-service spec: selector: app: demo-app type: LoadBalancer ports: - name: http port: 80 targetPort: 8080
Ingress LoadBalancer,每个服务开放一个公网IP 采用 Ingress 暴露多个服务,类似于 nginx的功能 可以设置外部 URL、基于域名的虚拟主机、SSL 和负载均衡。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-http namespace: dev spec: rules: - host: nginx.demo.com http: paths: - path: / backend: serviceName: nginx-service servicePort: 80 - host: tomcat.demo.com http: paths: - path: / backend: serviceName: tomcat-service servicePort: 8080 nginx.demo.com 流量路由到 nginx-service 服务上的端口 80 tomcat.demo.com 流量路由到 tomcat-service
ClusterIP 集群内部服务通信 NodePort 向集群外部暴露 TCP 和 UDP 服务,没有负载均衡的能力,并且会在每个节点上开启端口,一个服务暴露一个端口 LoadBalancer 在 NodePort 的基础上增加了一层,只提供一个公网 ip 给外部访问,外部访问这个 ip 再负载均衡分发给 Node 节点的 Pod Ingress 向外暴露HTTP服务,且可以提供域名和URL路径负载均衡路由能力

上一篇     下一篇
nsenter命令

以Docker为代表的容器技术介绍

docker和containerd

容器化部署 docker docker-compose k8s

vertx core web 实例

JAVA Void类