首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kubernetes服务暴露外部方案

Kubernetes 平台内的 Pod IP 随着容器的重启或镜像更新,重建后 IP 无法固定,不适合被外部直接访问(Macvlan 可固定 IP)。

如果要让应用被外部访问,需要有方案将服务暴露到外部。Kubernetes 集群中,负载均衡通常包含 4层的 Service 和 7层的 Ingress,而对于客户环境,通常还会涉及到外部的负载均衡(包括 F5、Nginx、Haproxy等)。

我们一般使用K8S 四层负载均衡实现服务外部暴露。Kubernetes 的4层负载均衡即TCP负载均衡,主要通过报文中的目标地址和端口,再加上上层负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

可以通过Kubernetes的Service实现。Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。

k8s平台的Service实现方案有如下:

ClusterIP:为Service自动分配一个仅平台内部可以访问的虚拟IP,通过访问该Service IP,可以实现对后端应用的负载均衡;

NodePort:为Service在每台机器上绑定一个端口,这样就可以通过:来访问该服务后端的应用;

LoadBalancer:创建一个 NodePort 类型的 service,然后发消息给部署 Kubernetes 集群的云服务提供商,请求其为所有 node 节点的外部 IP 地址以及设定的 NodePort 端口配置负载均衡。

ExternalName,将service 映射到外部的域名。

4种服务的实现方式如下:

一、ClusterIP

ClusterIP 服务是 Kubernetes 的默认服务。它是一个集群内的服务,集群内的其它应用都可以访问该服务。但集群外部无法访问。

默认就是clusterip,不需要指定(spec.type: ClusterIP)

apiVersion: v1kind: Servicemetadata: name: vj-internal-serviceselector: app: vj-appspec: type: ClusterIP ports: - name: http port: 80 targetPort: 80 protocol: TCP

·       ClusterIP类型的4层负载均衡适合于在平台内部为应用之间的访问实现服务发现和负载均衡;

二、NodePort

NodePort服务是引导外部流量到你的服务的最原始方式。NodePort,正如这个名字所示,在所有节点上开放一个特定端口(默认端口范围30000-32767),任何发送到该端口的流量都被转发到对应服务。

特殊配置:指定(spec.type:NodePort),并且设置 :spec.ports[*].nodePort and .spec.clusterIP:spec.ports[*].port

apiVersion: v1kind: Servicemetadata: name: vj-internal-serviceselector: app: vj-appspec: type: NodePort ports: - name: http port: 80 nodePort: 30036 protocol: TCP

·       NodePort类型的4层负载均衡则适合于把平台的应用暴露到平台之外,使得从平台之外可以访问平台上部署的应用。

三、 LoadBalancer

LoadBalancer 服务是暴露服务到 internet 的标准方式。在如 GKE 的公有云上,这种方式会启动一个 Network Load Balancer,它将给你一个单独的 IP 地址,转发所有流量到你的服务。

apiVersion: v1kind: Servicemetadata: name: vj-servicespec: selector:app: VjApp ports: - protocol: TCP port: 80 targetPort: 6379 clusterIP: 10.0.10.119 type: LoadBalancerstatus: loadBalancer:ingress: - ip: 192.168.1.120

四、ExternalName

Service 相当于做了一个 CNAME,注意,如果 ExternalName 写成 IP 也会作为域名解析。

apiVersion: v1kind: Servicemetadata: name: vj-service namespace: prodspec: type: ExternalNameexternalName: vj.domain.hksd.com

本次分享到此,tks。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200611A00BE100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券