Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx入口资源注释到设置代理\u pass指令_Nginx_Kubernetes_Proxy_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

Nginx入口资源注释到设置代理\u pass指令

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-

当我使用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-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代理这样的日志。