nginx - kubernetes 入口服务器别名仅适用于一个入口主机
问题描述
根据这个文档(https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#server-alias),我可以在 nginx 配置文件中添加额外的 server_name 。但是,它会将额外的 server_name 添加到我的所有主机中,这肯定会导致冲突。有没有办法只为我的一个主机添加服务器别名?假设我只想将 10.10.0.100 添加到我的 test1 主机。入口示例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/server-alias: 10.10.0.100
spec:
rules:
- host: test1.com
http:
paths:
- path: /
backend:
service:
name: test1-service
port:
number: 8000
pathType: Prefix
- host: test2.com
http:
paths:
- path: /
backend:
service:
name: test2-service
port:
number: 8000
pathType: Prefix
解决方案
TL;博士
您可以将Ingress
资源拆分为多个对象(它们将一起工作)以Annotations
仅添加到特定hosts
的 .
Annotations
只能在整个 kubernetes 资源上设置,因为它们是资源的一部分metadata
。ingress spec
不包括较低级别的该功能。
扩展答案以举例说明如何创建此类设置。让我们假设(示例):
- 所有必需的域都指向的
Service
类型:LoadBalancer
nginx-ingress-controller
hello.kubernetes.docker.internal
- 用于host
.spec
hello-two.kubernetes.docker.internal
- 用于annotations
.metadata
- --
goodbye.kubernetes.docker.internal
- 用于host
.spec
goodbye-two.kubernetes.docker.internal
- 用于annotations
.metadata
跳过Deployment
和Service
定义,Ingress
资源应如下所示:
hello-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-ingress
annotations:
nginx.ingress.kubernetes.io/server-alias: "hello-two.kubernetes.docker.internal"
spec:
rules:
- host: hello.kubernetes.docker.internal # <-- IMPORTANT
http:
paths:
- path: /
backend:
service:
name: hello-service
port:
number: 80
pathType: Prefix
goodbye-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: goodbye-ingress
annotations:
nginx.ingress.kubernetes.io/server-alias: "goodbye-two.kubernetes.docker.internal"
spec:
rules:
- host: goodbye.kubernetes.docker.internal # <-- IMPORTANT
http:
paths:
- path: /
backend:
service:
name: goodbye-service
port:
number: 80
pathType: Prefix
以上定义将创建 2 个Ingress
将被合并的资源:
hello-service
将回应:hello.kubernetes.docker.internal
hello-two.kubernetes.docker.internal
goodbye-service
将回应:goodbye.kubernetes.docker.internal
goodbye-two.kubernetes.docker.internal
跑步:
$ kubectl get ingress
:
NAME CLASS HOSTS ADDRESS PORTS AGE
goodbye-ingress <none> goodbye.kubernetes.docker.internal localhost 80 36m
hello-ingress <none> hello.kubernetes.docker.internal localhost 80 36m
其他资源:
推荐阅读
- excel - 如何使用 Excel VBA 宏使 excel 工作表受保护和不受保护?
- python - 用布尔数组屏蔽opencv bgr的最有效方法
- flutter - Flutter 在现有项目中构建 Web 不断失败
- swift - 了解组合中的 share()
- php - 在foreach中合并数组
- android - 错误:(19) 尝试安装 ADMOB 时,在包 'android' 中找不到属性 'appComponentFactory' 的资源标识符
- c# - 如何在 Access db vs 中按计数和名称选择行
- git - 扩展现有的 git 存储库,并定期、有选择地合并来自主项目的更新
- c# - 如果缺少 dll 文件,如何在 C# 项目中使用 interop.x.dll 文件?
- verilog - 通过 7 段 LED 循环字母的有效方法