我知道当我们想要使用单个Load Balancer/public IP公开多个服务/路由时,可以使用Ingress.
现在我想将我的Nginx服务器暴露给公众.我有两个选择
service type as LoadBalancervoila我得到了公共IP现在我可以使用选项1完成我的工作,何时或为什么我会选择选项2什么是在没有Ingress的情况下使用Ingress的nginx的优势?
我是Kubernetes的新手,想了解如何将Kubernetes中运行的服务暴露给外界.我在群集上使用NodePort公开了它.因此,例如:服务公开主机上的端口31234,我可以通过https:// kubeserverIP:31234从另一台服务器获取服务.
我想要实现的是通过nginx(在不同的服务器上,在Kube控件之外)通过URL(例如http://service.example.com)提供此服务.我已经尝试使用指向服务的上游部署nginx,但这不起作用并且出现错误的网关错误.
这里有什么我想念的吗?或者是否有更简洁的方法来实现这一目标.
我有一个裸机安装的Kubernetes集群,无法访问gce负载均衡器或其他供应商的LB.
谢谢
我有一个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) 我的理解是,设置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
我\xe2\x80\x99\xe2\x80\x99m想知道\xe2\x80\x9c如何将Nginx IP附加到X-Forwarded-For\xe2\x80\x9d
\n\n我在 Ingress 注释中添加了片段。
\n\napiVersion: 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";\nRun 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";\nRun Code Online (Sandbox Code Playgroud)\n\n所以我的后端服务器将得到两个X-Forwarded-For
有人知道\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;\nRun Code Online (Sandbox Code Playgroud)\n 我正在尝试使用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) 我正在 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
我正在升级 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 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 + 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.so上nginx.conf通过ingress.yaml)