我在一台机器上执行了 kubeadm init 。我按照网络等上的所有说明进行操作,最终得到以下结果:
kubectl get nodes:
NAME STATUS ROLES AGE VERSION
slchvdvcybld001 Ready control-plane 140m v1.24.2
slchvdvcydtb001 Ready <none> 136m v1.24.2
slchvdvcytst001 Ready <none> 137m v1.24.2
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,没有节点是 Master 或 Worker 或类似的节点。
我没有任何特殊的设置,我所做的就是安装它并进行初始化。
日志文件中没有错误。仪表板是绿色的,所有东西都是绿色的。
这些是 kubectl 等的版本:
Client Version: v1.24.2
Kustomize Version: v4.5.4
Server Version: v1.24.2
Run Code Online (Sandbox Code Playgroud) 我正在尝试为limit_reqKubernetes ingress-nginx 中的特定路径设置速率限制选项,以防止强制身份验证。
我已经limit_req_zone使用 ConfigMap定义了:
http-snippet: |
limit_req_zone $the_real_ip zone=authentication_ratelimit:10m rate=1r/s;
Run Code Online (Sandbox Code Playgroud)
接下来,我使用注解添加自定义位置块:
nginx.ingress.kubernetes.io/configuration-snippet: |
location ~* "^/authenticate$" {
limit_req zone=authentication_ratelimit nodelay;
more_set_headers "x-test: matched";
}
Run Code Online (Sandbox Code Playgroud)
这会产生 nginx.conf:
server {
# - - 8< - -
location / {
# - - 8< - -
location ~* "^/authenticate$" {
limit_req zone=authentication_ratelimit nodelay;
more_set_headers "x-test: matched";
}
proxy_pass http://upstream_balancer;
proxy_redirect off;
}
Run Code Online (Sandbox Code Playgroud)
结果是/authenticate总是返回 HTTP 503(带有 x-test 标头)。来自入口访问日志的消息:
<ip> - [<ip>] - - [04/Jan/2019:15:22:07 +0000] "POST /authenticate …Run Code Online (Sandbox Code Playgroud) 我有一个使用https的后端。我想根据URL /路径将后端的负载分开。
我决定使用ingress进行基于url / path的逻辑,以将流量移至不同的后端(相同的后端,只是复制到不同的NodePorts)
我的问题是如何配置入口以接收https请求并将这些https请求转发到https后端?
谢谢
编辑:我添加了yaml文件:
spec:
rules:
- http:
paths:
- backend:
serviceName: service
servicePort: 9443
path: /carbon
- backend:
serviceName: service2
servicePort: 9443
path: /oauth
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我无法将规则表http更改为https
我正在创建一个配置以在 AWS 上的 Kubernetes 集群中托管一些应用程序。我有两个不同的应用程序,具有单独的服务/pod/选择器,但我现在想用一个入口公开它们。
所以我创建了以下入口控制器
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /foo
backend:
serviceName: foo
servicePort: 8080
- path: /bar
backend:
serviceName: bar
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
并且入口从 AWS 获取 ELB 没有任何问题,但是当我尝试浏览应用程序(使用 Tomcat appserver 的 Java 应用程序)时,我总是收到以下页面
这是经典的旧 Tomcat 欢迎页面,但每个请求总是返回 index.html(未加载 css/img),而且如果我尝试为应用程序使用正确的上下文路径,我会收到此页面。
如果我使用服务 (LoadBalancer) 公开应用程序,我可以使用它而不会出现这些问题,所以我认为入口配置有问题。
有任何想法吗?
更新
如果我使用这样的单一路径的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: foo
servicePort: …Run Code Online (Sandbox Code Playgroud) tomcat kubernetes kubernetes-ingress amazon-eks nginx-ingress
我有一个 eks 集群,我的部署、服务和 loadBalancer 一切正常。每个服务都创建了自己的 LoadBalancer,所有服务都已启动并正在运行。我有一个前端服务和 2 个后端服务,这里是我的部署和入口文件
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache-kubernetes
spec:
replicas: 2
selector:
matchLabels:
app: apache-kubernetes
template:
metadata:
labels:
app: apache-kubernetes
spec:
containers:
- name: apache-kubernetes
image: httpd
ports:
- containerPort: 80
env:
- name: MESSAGE
value: Hello Kubernetes!
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-apache-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: apache.example.com
- http:
paths:
- path: /
backend:
serviceName: apache-kubernetes
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我有一个类似的部署和服务 yaml 文件,用于部署和创建 nginx Web 服务器。我还运行了以下命令所有部署都需要以下强制命令。
kubectl …Run Code Online (Sandbox Code Playgroud) paths:
- backend:
serviceName: booknotes-front-end-service
servicePort: 80
path: /
- backend:
serviceName: booknotes-back-end-service
servicePort: 3000
path: /api
Run Code Online (Sandbox Code Playgroud)
这是我的 ingres-nginx 资源中的规则。我尝试将所有从开始的流量定向/api到我的后端服务,该服务正常工作,但是如果我后端的某些路由类似于 /api/users 它不起作用,我的后端发送响应未找到,当我在本地运行这条路线工作正常。此外,我尝试从我的 koa 路由中删除 /api 前缀并将其更改为/users,然后我也更改 path: /api为,path: /users并且这些东西正常工作。我应该怎么做才能修复它?如果您需要其他信息,请告诉我!
kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress
我有三个 pod,里面有 HTTPS 服务器。我曾经通过 NodePort 服务访问它们。现在我部署了一个 Nginx Ingress 将它们全部集中在一个 IP 中。我注意到 Nginx Ingress 无法与 pod 中的 HTTPS 服务器连接,但如果我将其更改为 HTTP,则可以完美连接。
如何让 Ingress 与 Pod 中的 HTTPS 服务器连接?
我尝试配置一个 tls 秘密,并将其添加到 Ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: k8s-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-ssl-secret: cert
spec:
rules:
- http:
paths:
- path: /api-rest
backend:
serviceName: api-rest
servicePort: 8080
- path: /auth
backend:
serviceName: auth-entry
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
它不起作用。我仍然遇到 503 服务暂时不可用
我已经阅读过有关 SSL Passthrough 的内容,但我也无法使其工作。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: k8s-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / …Run Code Online (Sandbox Code Playgroud) 我的请求是通过 Cloudflare 代理的,Cloudflare 会根据 IP 地址在 http 标头中设置一个标头,指示国家/地区。我想根据 Nginx 入口控制器中的此标头使用某些路径重定向请求。我该怎么做呢?
我只需要使用 Helm 图表“ingress-nginx”将 nginx-ingress 控制器部署到 kubernetes 主节点。它提供了一个选项“controller.nodeSelector”来选择要部署的 k8s 节点。所以我想使用此选项来选择带有 label 的 k8s 主节点node-role.kubernetes.io/master=,但尝试了不同的格式,无法让它按预期工作。
失败案例:
helm install --set controller.hostNetwork=true --set controller.hostPort.enabled=true --set controller.extraArgs.enable-ssl-passthrough="" --set controller.replicaCount=1 --set controller.nodeSelector."node-role\.kubernetes\.io/master"="" --namespace rwe ingress-nginx ingress-nginx/ingress-nginx
Run Code Online (Sandbox Code Playgroud)
您能帮忙建议如何让这个选项生效吗?谢谢。
我正在努力让我的 AKS 集群正常工作。我无法访问我的服务的公共IP(使用 nginx-ingress-controller )我尝试了azure负载均衡器入口,但这不起作用我在我的azure控制台中创建了一个静态公共IP并将其分配给我的nginx入口控制器 -该 IP 也不起作用我也尝试删除 kube-proxy pod,因为有些人抱怨这些在重新创建其入口后不会更新,因此他们必须通过删除它们来重新创建。这不是没有设置入口规则的问题,因为我收到连接超时(甚至无法访问 IP)而不是 404 错误
这是我的入口配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app
annotations:
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- api.app
secretName: tls
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app
port:
number: 8080
Run Code Online (Sandbox Code Playgroud)
这是我的服务
$ kubectl get svc -A
default kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 2d1h
default app LoadBalancer 10.0.85.118 20.81.3.210 8080:30578/TCP,6565:31233/TCP 171m
ingress ingress-nginx-controller LoadBalancer 10.0.21.143 20.121.107.7 80:31325/TCP,443:31584/TCP 18m
Run Code Online (Sandbox Code Playgroud)
我可以通过该服务的公共 IP 访问我的应用程序(负载均衡器配置) …
我目前在托管 Lucidworks Fusion 的 Amazon EKS 集群上遇到问题。首先,我有一个 Amazon EKS v1.18集群,然后我将其升级到v1.19,一切进展顺利。我的集群中还运行了ingress-nginx-3.7.1,然后我将其升级到ingress-nginx-4.0.19,此时一切似乎仍然正常运行。也就是说,一旦我将集群升级到v1.20,当耗尽我的 Pod 并在新工作节点中重新启动它们时,所有 Pod 都会正确重新启动,除了我的大使Pod 现在陷入CrashLoopBackOff状态。我查看了这个 pod 的日志,发现以下错误:
2022/04/08 14:00:35 ERROR(s): kubebootstrap: WORKER PANICKED: ingresses.networking.k8s.io is forbidden: User "system:serviceaccount:sandbox1:sandbox1-ambassador" cannot list resource "ingresses" in API group "networking.k8s.io" in the namespace "sandbox1"
Run Code Online (Sandbox Code Playgroud)
有谁知道这意味着什么?我相信这告诉我一些与权限相关的事情,但我不太确定。另外我想了解导致此问题的原因,是将我的 EKS 集群升级到 v1.20 还是升级 ingress-nginx 或完全不同的东西?最后我想了解如何解决这个问题并使这个 Pod 再次正常运行?欢迎任何帮助。
kubernetes nginx-ingress ambassador k8s-serviceaccount k8s-rolebinding
nginx-ingress ×11
kubernetes ×9
nginx ×4
amazon-eks ×2
ambassador ×1
azure ×1
azure-aks ×1
networking ×1
tomcat ×1