nginx - kubernetes ingress server-alias 仅适用于一台 ingress 主机

标签 nginx kubernetes kubernetes-ingress nginx-ingress server-name

根据此文档( https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#server-alias ),我可以将额外的 server_name 添加到 nginx 配置文件中。 但是,它向我的所有主机添加了额外的 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 can only be set on the whole kubernetes resource, as they are part of the resource metadata. The ingress spec doesn't include that functionality at a lower level.

-- Stackoverflow.com: Questions: Apply nginx-ingress annotations at path level


扩展答案以给出如何创建此类设置的示例。让我们假设(示例):

  • 指向 nginx-ingress-controllerLoadBalancer 类型的 Service 的所有必需域:
    • hello.kubernetes.docker.internal - 用于host .spec
    • hello-two.kubernetes.docker.internal - 用于注释 .metadata
    • --
    • goodbye.kubernetes.docker.internal - 用于host .spec
    • goodbye-two.kubernetes.docker.internal - 用于注释 .metadata

跳过DeploymentService定义,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

再见-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 将响应:
    • 再见.kubernetes.docker.internal
    • 再见-two.kubernetes.docker.internal

运行:

  • $ kubectl 获取入口:
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

其他资源:

关于nginx - kubernetes ingress server-alias 仅适用于一台 ingress 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65543927/

相关文章:

kubernetes-ingress - 如何将 minikube 上的入口暴露给外部主机

ssl - 为什么 prestashop 不能与 ssh 一起正常工作?

reactjs - PM2 和 nextjs 在运行一段时间后停止响应请求

nginx - 反向代理锁定功能

nginx - 强制 nginx 写一个空的/空白的 http 授权请求 header

kubernetes - 关键字段的含义

nginx - 如何在 IBM Bluemix/Kubernetes 中为代理缓冲参数添加自定义 NGINX(入口)片段?

kubernetes - 对于 Helm chart ,有哪些版本可用?

http-status-code-404 - Istio 入口网关 : 404 NR route_not_found

kubernetes - 是否可以在不停机的情况下重新配置在 Kubernetes 中运行的 Ingress?