Kuberbetes--将Service暴露到集群外部

一、Service作用

 

    Kubernetes为Service创建的ClusterIP地址是对后端Pod列表的一层抽象,对于集群外部来说没有任何意意义,但有很多Service需要对外部提供服务,Kubernetes提供多种机制将Service暴露出去,供客户端访问。可以通过Service对象的类型字段"type"进行设置。
Service类型:
  • ClusterIP:Kubernetes默认会自动设置Service的虚拟IP地址,仅可供集群内部的客户端应用访问,可以手动设置一个ClusterIP地址,需要保证该IP地址在kubernetes集群设置的ClusterIP范围内,并没有被其它Service使用
  • NodePort:将Service的端口映射到每个Node的一个端口号上,这样集群中的任意Node都可以作为Service的访问入口地址,即NodeIP:NodePort
  • LoadBalancer:将Service映射到一个已经存在的负载均衡器的IP地址上,通常在公有云使用
  • ExternalName:将Service映射为一个外部域名地址,通常在ExternalName字段设置

二、NodePort

apiVersion: v1
kind: Service
metadata:
  name: webapp
spec:
  ports:
  - port: 8081 #Service所需的虚拟端口号
    targetPort: 8080  #指定后端Pod的端口号
    nodePort: 8081    #映射到Node的端口号
  selector:
    app: webapp

   在默认情况下,Node的kube-proxy会在全部网卡(0.0.0.0)上绑定NodePort端口。

    在很多数据中心环境,一台主机会配置多块网卡,作用各不相同(例如存在业务网卡和管理网卡等)。在Kubenetes1.10版本开始,kube-proxy可以通过设置特定的IP地址将NodePort绑定到特定的网卡上,而无需绑定在全部网卡上,其设置方式为为配置启动参数“--nodeport-address”,指定需要绑定的网卡IP地址,多个地址之间使用逗号隔开。

--nodeport-addresses=10.0.0.0/8,192.168.18.0/24 
#仅在10.0.0.0/8和192.168.0/24对应的网卡上绑定NodePort端口号,其他IP地址不会绑定

    如果用户在Service定义中不设置具体的nodePort端口号,Kubernetes会自动分配一个Nodeport范围内可用的端口号。

三、LoadBalancer类型 

    通常在公有云环境中设置Service为“LoadBalancer”,可以将Service映射到公有云提供的某个负载局衡器的IP地址上,客户端通过负载均衡器的IP地址和端口号就可以访问到具体的服务,无须再通过kube-proxy提供的负载均衡器机制进行流量转发。公有云提供的LoadBalancer可以直接将流量转发到后端Pod上,而负载均衡分发机制依赖于公有云服务上具体实现。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalaner
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
  clusterIP: 10.0.171.239

    在服务创建之后,云服务商会在Service的定义中补充LoadBalancer的IP地址(status字段) 

status:
  loadBalancer:
    ingress:
    - ip: 192.0.2.128

    缺点: 每一个LoadBalancer暴露的服务都有它自己的IP地址和端口号,不能一个ip地址就可以访问所有的服务。

四、ExternalName

    ExternalName类型的服务用于将集群外的服务定义为kubernetes的集群Service,并且通过externalName自动指定外部服务的地址,可以使用域名或IP格式。集群内的客户端应用通过访问这个Service就能访问外部服务了。这种类型的Service没有后端Pod,无需LabelSelector。

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: prod
spec:
  type: ExternalName
  externalName: my.databases.example.com

     设置服务名字为my-service,所在的命名空间为prod,客户端访问服务地址my-service.prod.svc.cluster.local时,系统将自动指向外部域名my.databases.example.com。还可以通过Ingress将服务暴露到集群外部。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值