Ingress控制器:加入并正确试用

Share
Share

[ Roger Klorese] SUSE CaaS Platform 团队最近发布了一项新功能:ingress控制器。它是 Kubernetes 网络的一个重要组成部分,特别是针对集群在节点数量,尤其是应用程序数量方面增长时。此项功能可供使用版本3的所有用户使用。

 

从外到内

有多种方法可以配置对服务的外部网络访问,或者阻止其被访问。仅与集群内的其他服务进行通信的服务不需要配置外部访问,实际上,应该明确将其配置为没有外部访问。通过将服务声明为 ClusterIP 类型,可以配置为它只能从集群内部进行访问。

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

(实际上,这并不完全准确:可以使用 Kubernetes 代理配置外部访问。但是这需要经过身份验证的用户身份运行kubectl,它实际上应该只用作在不能通过 Internet 进行访问的非生产环境中进行调试的临时工具。)

从集群外部访问服务的最简单方法是将其定义为 Nodeport 类型,此时会将服务定义为在集群每个节点上的特定端口都可以访问。

apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
selector:
app: my-app
type: NodePort
ports:
– name: http
port: 80
targetPort: 80
nodePort: 30036
protocol: TCP

在此示例中,服务将侦听集群中每个节点的端口 30036。(所选端口必须未使用且在 30000-32767 范围内;如果省略 nodePort 选项,Kubernetes 将为您做出选择)。此服务是唯一可以在该集群中使用 30036 的服务(每个服务都需要有自己的端口号)。在大型复杂集群中,这可能是一个重要的限制因素。

如果您在提供负载均衡器的公共云中工作,或者在具有受支持控制器的集群前面的本地网络中有负载均衡器,则可以将服务配置为 LoadBalancer 类型。负载均衡器将为每个服务分配 IP 地址。这在公共云中可能会产生非常昂贵的费用,并且在本地部署中可能会受到外部 IP 地址分配的严重限制。

什么是 Ingress 控制器?

使用 Ingress 控制器是一种更加灵活和强大的方法。在 Kubernetes 中,Ingress 控制器是独立的资源,而不是服务类型。它位于多个服务的上级,并启用和控制对它们的访问。

以下是 Ingress 控制器服务声明的一个示例。

apiVersion: v1
kind: Service
metadata:
name: my-ingress-controller
namespace: default
labels:
k8s-app: my-ingress-controller
spec:
type: LoadBalancer
ports:
– port: 80
nodePort: 30021
name: http
– port: 443
nodePort: 30022
name: https
selector:
k8s-app: my-ingress-controller

请注意,该服务将自身标识为 LoadBalancer 类型。这是典型情况,允许使用多个端口,但如果要将其限制为一个端口,则可以使用 NodePort 类型。(如果这样做,则必须选择 HTTP 或 HTTPS 中的一个来提供服务,而不是同时选择两者。)

在 Ingress 控制器下级,每个服务都可以是 ClusterIP 类型,因为外部网络是与Ingress控制器而不是服务本身进行通信。

不止是纽带

  • 当然,Ingress 控制器可以将外部IP地址和端口连接到内部服务。但这不是它的唯一功能。Ingress 控制器提供的功能包括:

https://www.mygameserver.com/baseball
https://www.mygameserver.com/basketball
https://www.mygameserver.com/hockey

  • 基于名称的虚拟主机(基于主机的路由):相同的方法可以应用于共享相同地址的完全不同的域。使用上述服务,还可以将它们公开为子域:

https://baseball.mygameserver.com
https://basketball.mygameserver.com
https://hockey.mygameserver.com

  • TLS终止:通过指定包含私钥和证书的 Kubernetes secret,可以通过传输层安全协议 (Transport Layer Security, TLS) 设置安全加密访问。证书应包含所服务的每个 FQDN(或通配符)的 CN。(请注意,SUSE CaaS Platform 也在集群的服务和组件之间使用 TLS,并提供自己的内部证书。)
  • 负载均衡。许多 Ingress 控制器都实现了负载均衡算法和服务权重等基本的负载均衡属性。更多高级功能需要硬件或软件负载均衡器的支持。

亲自体验

SUSE CaaS Platform 3 订阅用户可从注册中心下载 Ingress 控制器并亲自尝试。如果不是,请开始 60 天免费试用

Share
(Visited 5 times, 1 visits today)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

No comments yet

Avatar photo
3,993 views