如何解决kubernetes ingress server-alias 仅适用于一台 ingress 主机
根据此文档 (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;DR
您可以将您的 Ingress
资源拆分为多个对象(它们将协同工作)以将 Annotations
添加到仅特定的 hosts
。
Annotations
只能在整个 kubernetes 资源上设置,因为它们是资源 metadata
的一部分。 ingress spec
在较低级别不包含该功能。
-- Stackoverflow.com: Questions: Apply nginx-ingress annotations at path level
扩展答案以举例说明如何创建此类设置。让我们假设(示例):
- 指向
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
其他资源:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。