标签: nginx-ingress

建立相对于新路径的响应链接

我如何重定向我的所有hrefs回复以走上新的道路。例如,我的入口文件是

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-odin
  annotations:    
    nginx.ingress.kubernetes.io/rewrite-target: /$1

spec:
  rules:
  - http:
      paths:
      - path: /odin/?(.*)
        backend:
          serviceName: flask-app-tutorial
          servicePort: 8080
Run Code Online (Sandbox Code Playgroud)

当我访问https://mysite/odin页面时。它起作用并返回响应:

HTML 响应是:

<html>
..
    <body>
        <div>
            <a href="/v0/index">Home</a>
            <a href="/v0/login">Login</a>
        </div>

    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,正如您所看到的,相对链接就像<a href="/v0/index">Home</a>. 如果我点击它,它将不起作用,因为没有像 之类的链接http://mysite/v0/index。如果我点击链接,我希望它转到http://mysite/odin/v0/index. 是否可以通过修改响应中的链接来获得,odin或者如果我单击它,它会查看源网址,即http://mysite/odin并将其相对于该网址进行定向?

Nginx Version: 1.15.10
ingress-nginx: 0.24.0
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了以下方法。

nginx.ingress.kubernetes.io/configuration-snippet: |
  proxy_set_header Accept-Encoding ""; #disable compression
  sub_filter '<head>' '<head> <base href="/odin/">';


nginx.ingress.kubernetes.io/add-base-url: ":true"
nginx.ingress.kubernetes.io/app-root: /odin

nginx.ingress.kubernetes.io/use-regex: "true" …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes nginx-ingress

4
推荐指数
1
解决办法
3032
查看次数

Kubernetes ingress 对于特定服务给出 404 错误

我已经在 Azure 上使用 nginx 入口设置了一个 kubernetes 集群。导航到特定路径时出现 404 错误。

我已经设置了一些示例应用程序,它们返回一个简单的回声,效果非常好。我的 ban api 应用程序总是返回 404 错误。

当我导航到入口路径时,例如

http://51.145.17.105/apple
Run Code Online (Sandbox Code Playgroud)

效果很好。但是,当我导航到 api 应用程序时,使用以下 URL 收到 404 错误:

http://51.145.17.105/ban-simple
Run Code Online (Sandbox Code Playgroud)

如果我登录到集群并卷曲 ban-simple 服务(不是入口 ip),例如

curl -L 10.1.1.40
Run Code Online (Sandbox Code Playgroud)

我得到了正确的回应。当我使用 nginx ingress 尝试它时,出现 404 错误。

入口映射对我来说看起来很正确。这是包含路径的入口 yaml 的副本。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fruit-ingress
  namespace: ban
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$
spec:
  rules:
  - http:
      paths:
        - path: /apple
          backend:
            serviceName: apple-service
            servicePort: 5678
        - path: /ban-simple
          backend:
            serviceName: ban-service
            servicePort: 80
Run Code Online (Sandbox Code Playgroud)

“好”服务的一个副本是:

kind: …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes kubernetes-ingress azure-aks nginx-ingress

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

Kubernetes 上的 Angular(入口路由)

我需要如何配置 Angular 7 应用程序正在运行的入口?

\n
apiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  name: myingress\n  annotations:\n    nginx.ingress.kubernetes.io/rewrite-target: /\n    nginx.ingress.kubernetes.io/use-regex: "true"\nspec:\n  rules:\n  - http:\n      paths:\n      - path:\n        backend:\n          serviceName: angular-service\n          servicePort: 80\n      - path: /test\n        backend:\n          serviceName: angular-service\n          servicePort: 80\n
Run Code Online (Sandbox Code Playgroud)\n

Angular 由 nginx 镜像托管:

\n
FROM nginx:alpine\nCOPY . /usr/share/nginx/html\n
Run Code Online (Sandbox Code Playgroud)\n

在 Kubernetes 上:

\n
FROM nginx:alpine\nCOPY . /usr/share/nginx/html\n
Run Code Online (Sandbox Code Playgroud)\n

在路上/一切正常。但在上面/test不起作用。\n控制台输出:

\n
> Uncaught SyntaxError: Unexpected token < runtime.js:1 \n\n> Uncaught SyntaxError: Unexpected token < polyfills.js:1\n\n> Uncaught SyntaxError: Unexpected token < main.js:1\n …
Run Code Online (Sandbox Code Playgroud)

kubernetes angular nginx-ingress

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

nginx-ingress 在 https 请求上返回默认后端

我的 AKS 可以通过 nginx-ingress 访问。一切都适用于 https,但由于我使用 https,nginx 无法匹配任何路由并使用默认后端。

我使用的是 Kubernetes 版本 1.15。我将域名更改为 example.com,将 IP 更改为 51.000.000.128。SSL 证书由外部提供商 (digicert) 签名。

入口控制器

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
Run Code Online (Sandbox Code Playgroud)

入口服务

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud-generic.yaml
Run Code Online (Sandbox Code Playgroud)

入口.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - kp-user'
spec:
  tls:
  - hosts:
    - example.com
    secretName: ssl-secret
  rules:
  - host: example.com
  - http:
      paths:
      - path: /app1(/|$)(.*)
        backend:
          serviceName: app1-service
          servicePort: 80
      - path: …
Run Code Online (Sandbox Code Playgroud)

kubernetes azure-aks nginx-ingress

4
推荐指数
1
解决办法
6014
查看次数

Nginx-ingress 上的默认证书

我想在 nginx-ingress 上禁用 SNI。如果使用像下面这样的 openssl 调用:

openssl s_client -showcerts -connect ***********.gr:443
Run Code Online (Sandbox Code Playgroud)

然后我希望 nginx-ingress 仅使用我配置的证书,而不使用 fake-k8s-cert。

如果浏览网络应用程序,证书就可以工作,但我还需要设置默认证书。

示例如下:

[root@production ~]# openssl s_client -showcerts -connect 3dsecureuat.torawallet.gr:443
CONNECTED(00000003)
depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/O=Acme Co/CN=Kubernetes Ingress Controller Fake Certificate
   i:/O=Acme Co/CN=Kubernetes Ingress …
Run Code Online (Sandbox Code Playgroud)

kubernetes nginx-ingress

4
推荐指数
1
解决办法
6121
查看次数

如何解决nginx入口中的路径冲突?

我在我的 EKS 集群上运行哨兵,根据官方文档,它只能在 rootPath“/”上公开,我还在默认的 Web 上下文“/auth”上公开 keycloak 所以我部署了 nginx 入口控制器,入口资源来匹配这些路径,但我遇到的问题是哨兵路径(“/”)总是重定向到“/auth”,这是keycloak的默认路径,这会导致冲突。就我而言,我不允许更改 keycloak 的网络上下文,因此我尝试为具有相同类的哨兵部署另一个 nginx 入口控制器,但我不知道该怎么做,因为所有示例都使用具有不同类的入口控制器。所以我想知道是否可能如何部署与第一个几乎相同的 seconf nginx 入口,或者是否有其他解决方案请帮助我了解。

这是我使用的 nginx 入口控制器:

apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx

---
# Source: ingress-nginx/templates/controller-serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    helm.sh/chart: ingress-nginx-2.0.1
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.31.1
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx
  namespace: ingress-nginx
---
# Source: ingress-nginx/templates/controller-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    helm.sh/chart: ingress-nginx-2.0.1
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.31.1
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller …
Run Code Online (Sandbox Code Playgroud)

sentry nginx-reverse-proxy kubernetes-ingress amazon-eks nginx-ingress

4
推荐指数
1
解决办法
5385
查看次数

cert-manager - Acme Http Solver 返回 404

cert-manager有一个 kubernetes 集群,其中有一个服务的 nginx 入口,我正在尝试使用ACME设置 https 访问ClusterIssuer

我对 cert-manager 遵循的步骤相当满意,但我目前正处于对 http 求解器提出挑战的阶段,cert-manager 在集群中配置了该解决器作为挑战过程的一部分。当我描述服务生成的挑战时,我发现其状态处于待处理状态:

Reason:      Waiting for http-01 challenge propagation: failed to perform self check GET request 'http://www.example.com/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg': Get "http://www.example.com/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg": dial tcp xx.xx.xx.xxx:80: connect: connection timed out
Run Code Online (Sandbox Code Playgroud)

当我从 k8s 主机服务器调用求解器的 url 时:

curl -H "Host: www.example.com" http://192.168.1.11:31344/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg
Run Code Online (Sandbox Code Playgroud)

我得到了 200 ok 回复。

注意:地址 192.168.1.11 是运行 httpsolver pod 的 k8s 节点的 IP。端口 31344 是 httpsolver pod 的 nodeIp 服务的内部端口。

我试图找出为什么挑战本身超时并且没有得到 200 回复。

我已经通过 4g(而不是 wifi)从我的手机测试了 http 解算器的 url,这样我得到 200 OK,这告诉我可以通过防火墙从外部访问 …

kubernetes kubernetes-ingress cert-manager nginx-ingress

4
推荐指数
1
解决办法
3873
查看次数

阻止 ingress-nginx 负载均衡器上的特定路径

我有许多指向入口控制器 IP 的域。我想阻止所有域/站点的/特定路径。有没有办法做到这一点。我可以用于nginx.ingress.kubernetes.io/configuration-snippet: | 每个网站。但正在寻找同时处理所有站点/域/入口资源的方法。

使用的控制器: https: //kubernetes.github.io/ingress-nginx/

nginx kubernetes kubernetes-ingress nginx-ingress

4
推荐指数
1
解决办法
7630
查看次数

无法通过 Ingress Nginx 控制器进行 SSL 传递

我有一个 Java Spring Boot 应用程序,并且已将服务器配置为在 SSL 上运行,这是强制性的。

server:
  port: 8443
  ssl:
    enabled: true
    key-store-type: pkcs12
    key-store: ${KEYSTORE}
    key-password: ${KEYSTORE_PASSWORD}
    key-store-password: ${KEYSTORE_PASSWORD}
    client-auth: need
Run Code Online (Sandbox Code Playgroud)

我已经从 LetsEncrypt 证书为我的域创建了一个证书*.kahootali.com,并通过运行为密钥库创建了一个 p12 文件

openssl pkcs12 -export -CAfile ca.crt -in cert.pem -inkey key.pem -certfile cert.pem -out kstore.p12
Run Code Online (Sandbox Code Playgroud)

我想使用 Ingress Nginx 控制器在 Kubernetes 上公开它,所以我通过以下方式创建了秘密

kubectl create secret generic store --from-file=kstore.p12
Run Code Online (Sandbox Code Playgroud)

我已经部署了应用程序,可以看到部署文件,当我将本地 8443 端口转发到其服务的 8443 并运行时

curl -iv --cacert ca.crt --cert mediator_cert.pem --key mediator_key.pem --resolve 'spring-app.kahootali.com:8443:127.0.0.1' https://spring-app.kahootali.com:8443/
Run Code Online (Sandbox Code Playgroud)

它工作正常并返回

* Added spring-app.kahootali.com:8444:127.0.0.1 to DNS …
Run Code Online (Sandbox Code Playgroud)

java ssl nginx kubernetes nginx-ingress

4
推荐指数
1
解决办法
2856
查看次数

无法在 Docker-Driver Windows 10 上访问 Minikube(v1.18.1) Ingress

我的问题与此完全相同。但再次复制问题供您参考::

\n

我面临的问题是我无法使用浏览器的 IP 访问 Minikube Ingress。我已经在 Windows 10 Home 上安装了 Minikube,并使用 docker driver( ) 启动了 minikube minikube start --driver=docker

\n
\n

系统信息:

\n

Windows 10 家庭版

\n

Minikube(v1.18.1)

\n

Docker(minikube 驱动程序)- Docker\n引擎版本 20.10.5

\n
\n

我正在关注这个官方文档 - https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

\n

首先,我通过在 Minikube 上运行以下命令来创建部署。

\n

kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0

\n

部署已创建,如下图所示:在此处输入图像描述

\n

在此输入图像描述

\n

接下来,我公开了上面创建的部署。为此,我运行了以下命令。

\n

kubectl expose deployment web --type=NodePort --port=8080

\n

这创建了一个服务,可以通过运行以下命令查看该服务:

\n

kubectl get service web\n服务截图如下:\n在此输入图像描述

\n
    \n
  1. 我现在可以通过运行以下命令在浏览器上访问该服务:
  2. \n
\n

minikube service web

\n …

tunnel docker kubernetes minikube nginx-ingress

4
推荐指数
1
解决办法
1850
查看次数