我如何重定向我的所有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) 我已经在 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) 我需要如何配置 Angular 7 应用程序正在运行的入口?
\napiVersion: 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\nRun Code Online (Sandbox Code Playgroud)\nAngular 由 nginx 镜像托管:
\nFROM nginx:alpine\nCOPY . /usr/share/nginx/html\nRun Code Online (Sandbox Code Playgroud)\n在 Kubernetes 上:
\nFROM nginx:alpine\nCOPY . /usr/share/nginx/html\nRun Code Online (Sandbox Code Playgroud)\n在路上/一切正常。但在上面/test不起作用。\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) 我的 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) 我想在 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) 我在我的 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
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,这告诉我可以通过防火墙从外部访问 …
我有许多指向入口控制器 IP 的域。我想阻止所有域/站点的/特定路径。有没有办法做到这一点。我可以用于nginx.ingress.kubernetes.io/configuration-snippet: | 每个网站。但正在寻找同时处理所有站点/域/入口资源的方法。
使用的控制器: https: //kubernetes.github.io/ingress-nginx/
我有一个 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) 我的问题与此完全相同。但再次复制问题供您参考::
\n我面临的问题是我无法使用浏览器的 IP 访问 Minikube Ingress。我已经在 Windows 10 Home 上安装了 Minikube,并使用 docker driver( ) 启动了 minikube minikube start --driver=docker。
\n\n系统信息:
\nWindows 10 家庭版
\nMinikube(v1.18.1)
\nDocker(minikube 驱动程序)- Docker\n引擎版本 20.10.5
\n
我正在关注这个官方文档 - https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
\n首先,我通过在 Minikube 上运行以下命令来创建部署。
\nkubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
部署已创建,如下图所示:在此处输入图像描述
\n\n接下来,我公开了上面创建的部署。为此,我运行了以下命令。
\nkubectl expose deployment web --type=NodePort --port=8080
这创建了一个服务,可以通过运行以下命令查看该服务:
\nkubectl get service web\n服务截图如下:\n
minikube service web
nginx-ingress ×10
kubernetes ×9
nginx ×4
azure-aks ×2
amazon-eks ×1
angular ×1
cert-manager ×1
docker ×1
java ×1
minikube ×1
sentry ×1
ssl ×1
tunnel ×1