具有多个入口资源对象的 Kubernetes nginx 入口控制器
Kubernetes nginx ingress controller with multiple ingress resource objects
Kubernetes 入口允许我们使用入口资源对象定义规则。我们部署了一个 nginx 入口控制器。然而对于 Ingress 我们有以下需求。
Ingress 使用“auth-url”处理外部身份验证
Ingress 中的 TLS 终止。
多个后端服务路由规则。
是否可以为所有路由定义仅具有外部身份验证定义的 Ingress。
没有指定“规则”子句,因为我们计划维护用于路由的专用 Ingress 资源 yaml 文件。
例如:Ingress1.yaml:常见 SSL 终止入口
resource "kubernetes_ingress" "ssl_terminate_ingress" {
metadata {
name = "ssl-termination-ingress"
namespace = "kube-system"
}
spec {
tls {
hosts = ["example.com"]
secret_name = "tls_secret"
}
}
//PLEASE SEE NO RULES AS WE WANT TO DEFINE FOR EVERY APPLICATION IN A SEPARATE FILE
}
Ingress2.yaml:所有路由的通用 JWT Ingress
resource "kubernetes_ingress" "jwt_auth_ingress" {
metadata {
name = "jwt-auth-ingress"
namespace = "kube-system",
annotations = {
"nginx.ingress.kubernetes.io/auth-url" = "http://my-auth-service"
}
}
}
入口3.yaml - 应用程序入口
resource "kubernetes_ingress" "app_ingress" {
metadata {
name = "app-ingress"
namespace = "app-ns"
}
rule {
host = "example.com"
http {
path {
path = "/my-app"
backend {
service_name = "app-service"
service_port = 80
}
}
}
}
所以我们预计 Ingress3.yaml 是应用程序入口,并且应该在此之前应用前两个入口文件。
我们能做到吗?或者它会是一个单独的 Ingress 资源文件,我们为整个 K8s 集群定义所有这 3 个资源文件
TL;DR:是的,您需要将它们放在一个入口中。
解释:
入口简单来说就是通往已部署应用程序的路由。
拥有 TLS 或 JWT 身份验证是该路由的“属性”或“附加功能”。
在您提出的场景中,您有:
- ingress1.yaml 使用 TLS 终止的 property/functionality 定义一条通往无的路由。
- ingress2.yaml 是 JWT 身份验证的 property/functionality 的路由。
- ingress3.yaml 在没有任何附加属性的情况下定义到您的应用程序的路由。
您需要一个定义应用程序路由的入口,以及 TLS 和 JWT 身份验证的附加功能。您可以通过将所有内容合并到一个入口中来实现这一点。
Kubernetes 入口允许我们使用入口资源对象定义规则。我们部署了一个 nginx 入口控制器。然而对于 Ingress 我们有以下需求。
Ingress 使用“auth-url”处理外部身份验证 Ingress 中的 TLS 终止。 多个后端服务路由规则。
是否可以为所有路由定义仅具有外部身份验证定义的 Ingress。 没有指定“规则”子句,因为我们计划维护用于路由的专用 Ingress 资源 yaml 文件。
例如:Ingress1.yaml:常见 SSL 终止入口
resource "kubernetes_ingress" "ssl_terminate_ingress" {
metadata {
name = "ssl-termination-ingress"
namespace = "kube-system"
}
spec {
tls {
hosts = ["example.com"]
secret_name = "tls_secret"
}
}
//PLEASE SEE NO RULES AS WE WANT TO DEFINE FOR EVERY APPLICATION IN A SEPARATE FILE
}
Ingress2.yaml:所有路由的通用 JWT Ingress
resource "kubernetes_ingress" "jwt_auth_ingress" {
metadata {
name = "jwt-auth-ingress"
namespace = "kube-system",
annotations = {
"nginx.ingress.kubernetes.io/auth-url" = "http://my-auth-service"
}
}
}
入口3.yaml - 应用程序入口
resource "kubernetes_ingress" "app_ingress" {
metadata {
name = "app-ingress"
namespace = "app-ns"
}
rule {
host = "example.com"
http {
path {
path = "/my-app"
backend {
service_name = "app-service"
service_port = 80
}
}
}
}
所以我们预计 Ingress3.yaml 是应用程序入口,并且应该在此之前应用前两个入口文件。
我们能做到吗?或者它会是一个单独的 Ingress 资源文件,我们为整个 K8s 集群定义所有这 3 个资源文件
TL;DR:是的,您需要将它们放在一个入口中。
解释:
入口简单来说就是通往已部署应用程序的路由。 拥有 TLS 或 JWT 身份验证是该路由的“属性”或“附加功能”。
在您提出的场景中,您有:
- ingress1.yaml 使用 TLS 终止的 property/functionality 定义一条通往无的路由。
- ingress2.yaml 是 JWT 身份验证的 property/functionality 的路由。
- ingress3.yaml 在没有任何附加属性的情况下定义到您的应用程序的路由。
您需要一个定义应用程序路由的入口,以及 TLS 和 JWT 身份验证的附加功能。您可以通过将所有内容合并到一个入口中来实现这一点。