标签: kubernetes-ingress

暴露nginx作为负载均衡器与Ingress控制器有什么区别?

我知道当我们想要使用单个Load Balancer/public IP公开多个服务/路由时,可以使用Ingress.

现在我想将我的Nginx服务器暴露给公众.我有两个选择

  1. 设置service type as LoadBalancervoila我得到了公共IP
  2. 使用Nginx Ingress Controller

现在我可以使用选项1完成我的工作,何时或为什么我会选择选项2什么是在没有Ingress的情况下使用Ingress的nginx的优势?

kubernetes kubernetes-ingress

8
推荐指数
2
解决办法
3823
查看次数

使用nginx反向代理在Kubernetes中公开服务

我是Kubernetes的新手,想了解如何将Kubernetes中运行的服务暴露给外界.我在群集上使用NodePort公开了它.因此,例如:服务公开主机上的端口31234,我可以通过https:// kubeserverIP:31234从另一台服务器获取服务.

我想要实现的是通过nginx(在不同的服务器上,在Kube控件之外)通过URL(例如http://service.example.com)提供此服务.我已经尝试使用指向服务的上游部署nginx,但这不起作用并且出现错误的网关错误.

这里有什么我想念的吗?或者是否有更简洁的方法来实现这一目标.

我有一个裸机安装的Kubernetes集群,无法访问gce负载均衡器或其他供应商的LB.

谢谢

kubernetes kubernetes-ingress kubernetes-service

8
推荐指数
2
解决办法
1万
查看次数

入口指向服务上的错误端口

我有一个Kubernetes服务,公开两个端口如下

Name:              m-svc
Namespace:         m-ns
Labels:            
Annotations:       <none>
Selector:          app=my-application
Type:              ClusterIP
IP:                10.233.43.40
Port:              first  8080/TCP
TargetPort:        8080/TCP
Endpoints:         10.233.115.178:8080,10.233.122.166:8080
Port:              second  8888/TCP
TargetPort:        8888/TCP
Endpoints:         10.233.115.178:8888,10.233.122.166:8888
Session Affinity:  None
Events:            <none>
Run Code Online (Sandbox Code Playgroud)

以下是入口定义:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: f5
    virtual-server.f5.com/http-port: "80"
    virtual-server.f5.com/ip: controller-default
    virtual-server.f5.com/round-robin: round-robin
  creationTimestamp: 2018-10-05T18:54:45Z
  generation: 2
  name: m-ingress
  namespace: m-ns
  resourceVersion: "39557812"
  selfLink: /apis/extensions/v1beta1/namespaces/m-ns
  uid: 20241db9-c8d0-11e8-9fac-0050568d4d4a
spec:

  rules:
  - host: www.myhost.com
    http:
      paths:
      - backend:
          serviceName: m-svc
          servicePort: 8080
        path: /first/path
      - backend:
          serviceName: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress kubernetes-service

8
推荐指数
1
解决办法
476
查看次数

在Azure AKS中使用Kubernetes Ingress的优点是什么?

我的理解是,设置Service类型以LoadBalancer创建新的Azure负载均衡器并为其分配IP地址Service.这是否意味着我可以使用端口80拥有多个服务?如果我的Service(一个ASP.NET核心应用程序)后面的应用程序可以处理TLS和HTTPS,为什么我不应该只使用LoadBalancer's Service我想要暴露给互联网?

使用Ingressif有什么好处我不关心TLS终止(你可以让Cloudflare处理TLS终止)?如果有的话,它会通过为每个请求添加额外的跃点来减慢速度.

更新

下面的一些答案提到创建负载平衡器的成本很高.应该注意的是,Azure上的负载均衡器是免费的,但是他们会为IP地址收取费用,他们会免费为您提供5个IP地址.因此,对于您希望公开最多五个IP地址的小型项目,它基本上是免费的.除此之外,你可能想看看广告Ingress.

如果您不使用,一些答案也会提到额外的复杂性Ingress.我已经提到Cloudflare可以为我处理TLS终止.我还发现了external-dnsKubernetes项目在Cloudflare中创建指向负载均衡器IP地址的DNS条目?在我看来,切割Ingress降低了复杂性,因为我不得不配置和管理.Ingress的选择也是巨大的,我可能会选择一个错误的选项,这会在一段时间后无法维护.

azure kubernetes azure-kubernetes kubernetes-ingress azure-aks

8
推荐指数
2
解决办法
671
查看次数

如何将 Nginx IP 附加到 Kubernetes Nginx Ingress Controller 中的 X-Forwarded-For

我\xe2\x80\x99\xe2\x80\x99m想知道\xe2\x80\x9c如何将Nginx IP附加到X-Forwarded-For\xe2\x80\x9d

\n\n

我在 Ingress 注释中添加了片段。

\n\n
apiVersion: networking.k8s.io/v1beta1\nkind: Ingress\nmetadata:\n  name: ing\n  annotations:\n    nginx.ingress.kubernetes.io/configuration-snippet: |\n      proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它似乎在 nginx.conf 中进行了双重设置。

\n\n
    proxy_set_header X-Forwarded-For        $remote_addr;\n...\n    proxy_set_header X-Forwarded-For "$remote_addr, $server_addr";\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我的后端服务器将得到两个X-Forwarded-For

\n\n

有人知道\xe2\x80\x9c如何禁用Nginx Ingress Controller\xe2\x80\x9d生成的proxy_set_header部分吗?

\n\n
        proxy_set_header X-Request-ID           $req_id;\n        proxy_set_header X-Real-IP              $remote_addr;\n\n        proxy_set_header X-Forwarded-For        $remote_addr;\n\n        proxy_set_header X-Forwarded-Host       $best_http_host;\n        proxy_set_header X-Forwarded-Port       $pass_port;\n        proxy_set_header X-Forwarded-Proto      $pass_access_scheme;\n\n        proxy_set_header X-Scheme               $pass_access_scheme;\n
Run Code Online (Sandbox Code Playgroud)\n

nginx kubernetes kubernetes-ingress nginx-ingress

8
推荐指数
3
解决办法
4万
查看次数

Traefik v2.2 入口路由示例不起作用

我正在尝试使用https://docs.traefik.io/routing/providers/kubernetes-crd/提供的配置设置 traefik 入口路由

我可以看到 traefik 已启动并正在运行,也可以看到仪表板。但是我在仪表板上看不到 whoami 服务,也无法通过 url 访问它。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

文件

# All resources definition must be declared
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingressroutes.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: IngressRoute
    plural: ingressroutes
    singular: ingressroute
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: middlewares.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: Middleware
    plural: middlewares
    singular: middleware
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingressroutetcps.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: IngressRouteTCP
    plural: …
Run Code Online (Sandbox Code Playgroud)

kubernetes traefik kubernetes-ingress traefik-ingress

8
推荐指数
1
解决办法
8699
查看次数

具有容器原生负载平衡的 GKE Ingress 未检测到运行状况检查(字段“resource.httpHealthCheck”的值无效)

我正在 Google Kubernetes Engine 上运行一个集群,我目前正在尝试按照以下文档从使用具有外部负载平衡(和 NodePort 服务)的 Ingress 切换到具有容器原生负载平衡(和 ClusterIP 服务)的 Ingress:容器原生负载平衡

为了与我的服务进行通信,我使用了以下入口配置,在使用 NodePort 服务而不是 ClusterIP 时,这些配置过去可以正常工作:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mw-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: mw-cluster-ip
    networking.gke.io/managed-certificates: mw-certificate
    kubernetes.io/ingress.allow-http: "false"
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: billing-frontend-service
              servicePort: 80
          - path: /auth/api/*
            backend:
              serviceName: auth-service
              servicePort: 8083
Run Code Online (Sandbox Code Playgroud)

现在按照文档,我没有使用 readinessProbe 作为容器部署的一部分作为健康检查,而是转而使用 ClusterIP 服务与 BackendConfig 结合使用。对于每个部署,我都使用这样的服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: auth
  name: auth-service
  namespace: default
  annotations:
    cloud.google.com/backend-config: '{"default": "auth-hc-config"}'
spec:
  type: ClusterIP
  selector: …
Run Code Online (Sandbox Code Playgroud)

google-compute-engine google-cloud-platform kubernetes google-kubernetes-engine kubernetes-ingress

8
推荐指数
1
解决办法
1308
查看次数

拒绝请求:拒绝准入审查,因为请求不包含 Ingress 资源,但包含 network.k8s.io/v1

我正在升级 kubernetes 1.19.1。然后入口部署给出这个警告;

警告:networking.k8s.io/v1beta1 Ingress 在 v1.19+ 中已弃用,在 v1.22+ 中不可用;使用networking.k8s.io/v1 Ingress ingress.networking.k8s.io/msrs-ingress 创建

我已经更改了正确的新版本 ingress api(v1beta 到 v1),但现在由于准入规则我无法再次安装;

来自服务器的错误:创建“disabled/my-ingress-prod-v2.yaml”时出错:admission webhook“validate.nginx.ingress.kubernetes.io”拒绝了请求:拒绝准入审查,因为请求不包含 Ingress 资源但是networking.k8s.io/v1, Resource=ingresses 在命名空间 my-pro 中名为 my-ingress2

实际上,我像这样更改了 my-ingress2;

后:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: my-ingress
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: frontend
              servicePort: 80
Run Code Online (Sandbox Code Playgroud)

之前:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend
                port:
                  number: 80
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到安装入口规则的正确方法。我不想禁用入场

kubectl …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress

8
推荐指数
1
解决办法
2620
查看次数

Kubernetes apiVersion:networking.k8s.io/v1 问题与“入口”

需要您在执行 Kubernetes YAML 文件时就某个问题提供指导。我的kubectl版本如下:

    Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"windows/amd64"}
    Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.14", GitCommit:"89182bdd065fbcaffefec691908a739d161efc03", GitTreeState:"clean", BuildDate:"2020-12-18T12:02:35Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
Run Code Online (Sandbox Code Playgroud)

这是从 Kubernetes 站点https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows下载的最新版本

YAML 有 apiVersion:networking.k8s.io/v1 kind: Ingress 和运行 YAML 的错误是

    no matches for kind "Ingress" in version "networking.k8s.io/v1"
Run Code Online (Sandbox Code Playgroud)

Kubernetes 问题https://github.com/kubernetes/kubernetes/issues/90077提到

  networking.k8s.io/v1beta1 == 1.14 to 1.18
  networking.k8s.io/v1 = 1.19+
Run Code Online (Sandbox Code Playgroud)

所以我想它应该可以正常工作吗?

我已将 API 版本更改为

apiVersion: extensions/v1beta1 or
apiVersion: networking.k8s.io/v1beta1
Run Code Online (Sandbox Code Playgroud)

但在 YAML 的另一部分失败

backend:
  service:
    name: {{ template "fullname" $ }}-srv
     port: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress

8
推荐指数
3
解决办法
6762
查看次数

我们如何在 Nginx Ingress Controller 上安装动态模块(官方不支持)?(地形,舵图)

我正在管理 Kubernetes + nginx。我想在 Nginx 入口控制器提供的 nginx 上安装动态模块。这些动态模块不是由 Nginx Ingress Controller 官方配置映射提供的(https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

所以我想我需要构建自己的 Nginx Ingress Controller Docker 容器。(可能会在此添加?https://github.com/kubernetes/ingress-nginx/blob/8951b7e22ad3952c549150f61d7346f272c563e1/images/nginx/rootfs/build.sh#L618-L632)你知道如何自定义控制器和管理它由掌舵图?我正在考虑从 Github 上的控制器主存储库创建一个 Fork 分支。但我不知道我们如何在 terraform + helm chart 上安装定制版本的控制器。

但是,我更喜欢使用不可定制的解决方案(因为一些注释设置......)

谢谢你。

环境:Kubernetes Nginx Ingress Controller 通过 helm chart + terraform Nginx Ingress Controller 安装 -> https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx

地形:

resource "helm_release" "nginx-ingress-controller" {
  name      = "nginx-ingress-controller"
  chart     = "ingress-nginx/ingress-nginx"
  namespace = "kube-system"
  version   = "3.34.0"
}
Run Code Online (Sandbox Code Playgroud)

动态模块 https://docs.nginx.com/nginx/admin-guide/dynamic-modules/dynamic-modules/ (安装过程可能是使用--add-dynamic-module选项,并且集合load_module modules/something.songinx.conf通过ingress.yaml

nginx docker kubernetes kubernetes-ingress nginx-ingress

8
推荐指数
1
解决办法
56
查看次数