Nginx入口资源注释到设置代理\u pass指令
当我使用nginx作为我的k8s集群的入口控制器时,指定入口规则会自动在nginx pod的/etc/nginx/conf.d/文件中创建相应的配置 因此,它将proxy_pass指令配置到相关的上游/后端服务。它是http。 对于我的服务的此入口规则:Nginx入口资源注释到设置代理\u pass指令,nginx,kubernetes,proxy,kubernetes-ingress,nginx-ingress,Nginx,Kubernetes,Proxy,Kubernetes Ingress,Nginx Ingress,当我使用nginx作为我的k8s集群的入口控制器时,指定入口规则会自动在nginx pod的/etc/nginx/conf.d/文件中创建相应的配置 因此,它将proxy_pass指令配置到相关的上游/后端服务。它是http。 对于我的服务的此入口规则: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: my-ingress # annotations: # nginx.org/redirect-
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
# annotations:
# nginx.org/redirect-to-https: "false"
# #nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- test.myapp.com
secretName: test-tls-secret
rules:
- host: test.myapp.com
http:
paths:
- backend:
serviceName: myui
servicePort: 80
- path: /api/
backend:
serviceName: myapp
servicePort: 88
默认情况下,它会在nginx配置中自动为后端创建此指令:
proxy_pass http://default-my-ingress-test.myapp.com-myapp-88;
但是,我需要它是这样的:
proxy_pass https://default-my-ingress-test.myapp.com-myapp-88;
然后,只有我的应用程序才能工作,因为后端只接受https请求
是否有任何方法可以通过入口资源使用任何注释或类似的内容来修改特定后端服务的proxy_pass指令
编辑: 有这样的注解吗
或者,我是否可以选择在与实际的
myapp
容器相同的pod中使用一个sidecar容器来处理它?我最近有一个类似的要求,后端pod希望通过https发送请求
您需要的是nginx控制器的功能。您需要使用标志“启用ssl直通”启动nginx入口控制器。这可以作为命令行参数传递给nginx部署
此后,需要使用以下注释部署入口资源:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
指示控制器将TLS连接直接发送到后端。我最近有一个类似的要求,后端POD希望通过https发送请求 您需要的是nginx控制器的功能。您需要使用标志“启用ssl直通”启动nginx入口控制器。这可以作为命令行参数传递给nginx部署 此后,需要使用以下注释部署入口资源:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
指示控制器将TLS连接直接发送到后端。我是否应该在入口资源中指定
spec.TLS
部分以及这些注释?这些设置是否会将配置中的proxy\u pass
指令更改为https?是,保留。我不太确定proxy_pass指令,但正如您提到的“我的应用程序将在后端仅接受https请求时工作”-此配置指示nginx控制器将https请求发送到后端,而不是在控制器处终止。我尝试了此操作,但没有成功。我收到400(错误请求)
错误,在访问POST请求https://test.myapp.com/api/v4/login
。我不确定该错误是否是由于附加的ssl passthrough注释造成的。您还需要确保nginx控制器启动时启用了--enable ssl passthrough
。pod日志应该在启动期间显示类似于“Starting TLS proxy for SSL Passthrough”
的内容。我通过值文件将enable SSL Passthrough设置为true,pod描述在args部分中显示了这一点。但是pod日志中没有类似启动TLS proxy for SSL Passthrough这样的日志。我是否应该在入口资源中指定spec.TLS
部分以及这些注释?并且,这些设置是否会将配置中的proxy\u pass
指令更改为https?是的。我不太确定proxy_pass指令,但正如您提到的“我的应用程序将在后端仅接受https请求时工作”-此配置指示nginx控制器将https请求发送到后端,而不是在控制器处终止。我尝试了此操作,但没有成功。我收到400(错误请求)
错误,在访问POST请求https://test.myapp.com/api/v4/login
。我不确定该错误是否是由于附加的ssl passthrough注释造成的。您还需要确保nginx控制器启动时启用了--enable ssl passthrough
。pod日志应该在启动期间显示类似于“Starting TLS proxy for SSL Passthrough”
的内容。我通过值文件将enable SSL Passthrough设置为true,pod描述在args部分中显示了这一点。但是pod日志中没有类似于启动SSL Passthrough的TLS代理这样的日志。