我已将 AWS ACM 提供的 SSL 证书附加到 NLB。NLB 会将请求转发到 nginx 入口。Nginx 给我以下错误。The plain HTTP request was sent to HTTPS port。我在 nginx ingress 中设置了以下注释。
我在 NLB 后面运行的 nginx 入口服务中设置了以下注释。
我的目标是在我们的 GCP GKE 中拥有带有 NGINX INGRESS 的外部 HTTP 云负载均衡器。
\n我正在尝试 Rami H 提出的解决方案,Google 开发人员 Garry Singh 在此确认:\n GKE Nginx Ingress Controller 前面的全局负载均衡器(HTTPS 负载均衡器)
\n\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
我已按照提到的 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
我们正在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的正确方法是什么?
我有一个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
我的 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) 我正在尝试让 Let's Encrypt 与 GKE 上的 cert-manager 一起使用。我遵循了以下程序:
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
Run Code Online (Sandbox Code Playgroud)
kubectl create namespace cert-manager
Run Code Online (Sandbox Code Playgroud)
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
Run Code Online (Sandbox Code Playgroud)
helm repo add jetstack https://charts.jetstack.io
Run Code Online (Sandbox Code Playgroud)
helm repo update
Run Code Online (Sandbox Code Playgroud)
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
是否可以根据 nginx-ingress 上的 HTTP 标头值对请求进行速率限制?
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)
像这样还是我可以更好地解决这个问题?
我已经使用 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) 我有以下 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) nginx-ingress ×10
kubernetes ×7
amazon-eks ×1
aws-nlb ×1
cert-manager ×1
containerd ×1
http ×1
lets-encrypt ×1
minikube ×1
nginx ×1
ssl ×1