Ingress控制器:加入并正确试用
[
] 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 天免费试用
Related Articles
5月 11th, 2023
SUSE Awarded 16 Badges in G2 Spring 2023 Report
5月 01st, 2023
My First Day at SUSE
6月 05th, 2023
No comments yet