标签: nginx-ingress

如何将 aws nlb 与 nginx 入口控制器结合使用以实现 ssl

我已将 AWS ACM 提供的 SSL 证书附加到 NLB。NLB 会将请求转发到 nginx 入口。Nginx 给我以下错误。The plain HTTP request was sent to HTTPS port。我在 nginx ingress 中设置了以下注释。

  • nginx.ingress.kubernetes.io/force-ssl-redirect: false
  • nginx.ingress.kubernetes.io/ssl-redirect: false

我在 NLB 后面运行的 nginx 入口服务中设置了以下注释。

  • service.beta.kubernetes.io/aws-load-balancer-backend-protocol:http
  • service.beta.kubernetes.io/aws-load-balancer-ssl-cert:“证书 arn”
  • service.beta.kubernetes.io/aws-load-balancer-ssl-ports:https
  • service.beta.kubernetes.io/aws-load-balancer-type:nlb

kubernetes amazon-eks nginx-ingress aws-nlb

3
推荐指数
1
解决办法
8155
查看次数

GKE 上具有 nginx-ingress 的 GCP 外部 HTTP 云负载均衡器

我的目标是在我们的 GCP GKE 中拥有带有 NGINX INGRESS 的外部 HTTP 云负载均衡器。

\n

我正在尝试 Rami H 提出的解决方案,Google 开发人员 Garry Singh 在此确认:\n GKE Nginx Ingress Controller 前面的全局负载均衡器(HTTPS 负载均衡器)

\n
\n

您可以将 Nginx 创建为 LoadBalancer 类型的服务,并按照此 google 文档为其提供 NEG 注释。https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing然后您可以使用此 NEG 作为 HTTP(S) 负载平衡的后端服务(目标) 您可以使用本文中的 gcloud 命令https://hodo.dev/posts/post-27-gcp-using-neg/

\n
\n

我已按照提到的 hodo.dev 教程成功部署了使用 NEG 作为后端服务的 HTTP LB。\n然后我发现此脚本将 NGINX-INGRESS 附加到 NEG,但它可能已过时并且在部署时失败。https://gist.github.com/halvards/dc854f16d76bcc86ec59d846aa2011a0

\n

请有人帮助我调整 hodo.dev 配置来部署 nginx-ingress?\n这里是我的配置脚本的存储库https://github.com/robinpecha/hododev_gke-negs-httplb

\n
#First lets define some variables:\nPROJECT_ID=$(gcloud config list project --format=\'value(core.project)\') ; echo $PROJECT_ID\nZONE=europe-west2-b ; echo $ZONE\nCLUSTER_NAME=negs-lb …
Run Code Online (Sandbox Code Playgroud)

http google-cloud-platform google-kubernetes-engine nginx-ingress google-cloud-load-balancer

3
推荐指数
1
解决办法
3562
查看次数

Kubernetes Nginx Ingress HTTP到HTTPS是通过301而不是308重定向的?

我们正在Azure AKS上运行几个k8s群集。该服务(幽灵博客)位于Nginx入口后面,并由Letsencrypt提供的证书进行保护。所有这些都很好,但是重定向行为是我遇到的麻烦。

Ingress可以正确地从http://whatever.com重定向到 https://whatever.com-问题是它使用308重定向来做到这一点,只要用户在网站上共享页面,该重定向就会剥离所有帖子/页面元。

此问题导致在大多数社交媒体资源上共享网站任何页面的用户都收到“预览链接”(页面标题和页面元预览不起作用,而是由“ 308永久重定向”文本代替)看起来像这样:

在此处输入图片说明

从这里的ingress-nginx文档中,我可以看到这是预期的行为(即308重定向),我认为这不是在社交共享服务尝试创建页面预览时与社交共享服务的交互。

尽管默认情况下Facebook(或twitter等)直接指向https网站可以解决此问题,但我目前无法强制这些网站将要用于创建预览的内容转向https。

设置永久重定向代码

我还看到,看来我应该能够将重定向代码设置为所需的格式(我相信301重定向将使Facebook等人正确提取帖子/网页摘要元),有关该文档在这里

问题是当我按指定添加重定向代码注释时:

nginx.ingress.kubernetes.io/permanent-redirect-code: "301"
Run Code Online (Sandbox Code Playgroud)

尽管能够(从我的kubectl代理中)看到重定向代码注释正确应用,但我仍然在资源上获得308重定向。作为参考,我在Ingress上的注释的完整列表如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ghost-ingress
  annotations:
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/permanent-redirect-code: "301"
Run Code Online (Sandbox Code Playgroud)

重申-我的问题是;通过自定义错误代码(在我的情况下为301)强制重定向到https的正确方法是什么?

kubernetes kubernetes-ingress nginx-ingress

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

在kubernetes GKE上为nginx入口控制器设置缓存控制头

我有一个ingress-nginx控制器处理流量到我在KKE上托管的Kubernetes集群.我使用docs中的helm安装说明进行设置:

文档在这里

在大多数情况下,一切都正常,但如果我尝试通过server-snippet注释设置缓存相关参数,那么应该获得缓存控制头的所有服务内容都会返回404.

这是我的ingress-service.yaml档案:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-read-timeout: "4000"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "4000"
    nginx.ingress.kubernetes.io/server-snippet: |
      location ~* \.(js|css|gif|jpe?g|png)$ {
        expires 1M;
        add_header Cache-Control "public";
      }
spec:
  tls:
    - hosts:
        - example.com
      secretName: example-com
  rules:
    - host: example.com
      http:
       paths:
        - path: /
          backend:
            serviceName: client-cluster-ip-service
            servicePort: 5000
        - path: /api/
          backend:
            serviceName: server-cluster-ip-service
            servicePort: 4000
Run Code Online (Sandbox Code Playgroud)

同样,它只是与正则表达式匹配的资源404(所有.js文件,.css文件等).

有关为什么会发生这种情况的任何想法?

任何帮助表示赞赏!

nginx kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress

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

允许pod通过ingress访问服务的域名

我的 minikube kubernetes 集群上有一个服务和入口设置,它公开了域名 hello.life.com 现在我需要从另一个 pod 内部访问这个域作为 curl http://hello.life.com 这应该返回正确的 html

我的服务如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: bulging-zorse-key
    chart: key-0.1.0
    heritage: Tiller
    release: bulging-zorse
  name: bulging-zorse-key-svc
  namespace: abc
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    name: bulging-zorse-key
  type: ClusterIP
status:
  loadBalancer: {}
Run Code Online (Sandbox Code Playgroud)

我的入口如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  labels:
    app: bulging-zorse-key
    chart: key-0.1.0
    heritage: Tiller
    release: bulging-zorse
  name: bulging-zorse-key-ingress
  namespace: dev
spec:
  rules:
  - host: hello.life.com
    http:
      paths:
      - …
Run Code Online (Sandbox Code Playgroud)

minikube kubernetes-helm nginx-ingress

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

让我们使用 Cert-manager 在 GKE 上加密:证书无效

我正在尝试让 Let's Encrypt 与 GKE 上的 cert-manager 一起使用。我遵循了以下程序:

单独安装 CustomResourceDefinition 资源

kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
Run Code Online (Sandbox Code Playgroud)

为 cert-manager 创建命名空间

kubectl create namespace cert-manager
Run Code Online (Sandbox Code Playgroud)

标记 cert-manager 命名空间以禁用资源验证

kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
Run Code Online (Sandbox Code Playgroud)

添加 Jetstack Helm 存储库

helm repo add jetstack https://charts.jetstack.io
Run Code Online (Sandbox Code Playgroud)

更新您的本地 Helm 图表存储库缓存

helm repo update
Run Code Online (Sandbox Code Playgroud)

安装 cert-manager Helm chart

helm install \
 --name cert-manager \
 --namespace cert-manager \
 --version v0.7.0 \
 jetstack/cert-manager
Run Code Online (Sandbox Code Playgroud)

这导致(在 cert-manager 命名空间中)

kubectl -n cert-manager get all

NAME                                           READY     STATUS    
RESTARTS   AGE
pod/cert-manager-6d8fc95f98-57c55              1/1       Running   0          26m …
Run Code Online (Sandbox Code Playgroud)

ssl google-kubernetes-engine lets-encrypt cert-manager nginx-ingress

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

基于 nginx-ingress 上的 HTTP 标头值的速率限制请求

是否可以根据 nginx-ingress 上的 HTTP 标头值对请求进行速率限制?

rate-limiting kubernetes nginx-ingress

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

默认后端 - 404 没有 www ( ingress )

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /
  ingress.bluemix.net/rewrite-path: "serviceName=nginx rewrite=/"
 name: nginx-ingress 
 namespace: 'default'  
spec:
 rules:
 - host: www.domain.com
   http:
     paths:
     - path: /*
       backend:
         serviceName: nginx
         servicePort: 80
Run Code Online (Sandbox Code Playgroud)

这里我有一些入口配置yaml文件。当我应用它时一切正常,但只有当你通过路径时www.domain.com,当我尝试使用时domain.com,它不起作用并返回我

默认后端 - 404

我该怎么办 ?在规则中再添加一台主机:

 - host: domain.com
   http:
     paths:
     - path: /*
       backend:
         serviceName: nginx
         servicePort: 80
Run Code Online (Sandbox Code Playgroud)

像这样还是我可以更好地解决这个问题?

kubernetes google-kubernetes-engine nginx-ingress

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

Kubernetes nginx 入口意外错误存储假 SSL 证书:无法创建 PEM 证书文件

我已经使用 containerd 在 CentOS 8 Kubernetes 1.17 上安装了 nignx ingress helm chat,ingress pod 失败并显示以下错误消息。同样的掌舵聊天在 CentOS 7 上与 Docker 一起工作。

I0116 04:17:06.624547       8 flags.go:205] Watching for Ingress class: nginx
W0116 04:17:06.624803       8 flags.go:250] SSL certificate chain completion is disabled (--enable-ssl-chain-completion=false)
W0116 04:17:06.624844       8 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:       0.27.1
  Build:         git-1257ded99
  Repository:    https://github.com/kubernetes/ingress-nginx
  nginx version: nginx/1.17.7

-------------------------------------------------------------------------------

I0116 04:17:06.624968       8 main.go:194] Creating API client for https://10.224.0.1:443
I0116 …
Run Code Online (Sandbox Code Playgroud)

kubernetes containerd nginx-ingress

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

kubernetes nginx ingress server-snippet 注释未生效

我有以下 ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: nginx-configuration-snippet
    annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
        nginx.ingress.kubernetes.io/server-snippet: |
          location /base/path/v1/api/update {
              deny all;
              return 404;
            }
spec:
  rules:
    - http:
        paths:
          - path: /base/path(/|$)(.*)
            backend:
              serviceName: myApi
              servicePort: 8080
Run Code Online (Sandbox Code Playgroud)

但是,当我将 PUT 请求发送到 /base/path/v1/api/update 而不是获得 404 时,我获得了 500,这意味着可以从入口控制器访问该路径。有人可以帮我找出原因吗?

我改为配置片段,我得到的错误是:

Error: exit status 1
2020/08/06 18:35:07 [emerg] 1734#1734: location "/base/path/v1/api/update" is outside location "^/base/path(/|$)(.*)" in /tmp/nginx-cfg008325631:2445
nginx: [emerg] location "/base/path/v1/api/update" is outside location "^/base/path(/|$)(.*)" in /tmp/nginx-cfg008325631:2445
nginx: configuration file /tmp/nginx-cfg008325631 test failed
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-helm kubernetes-ingress nginx-ingress

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