[英]Configuring nginx to use ingress authentication by default on GKE?
根據這些說明,我一直在嘗試為在 GKE 上運行的 nginx 服務器設置入口身份驗證。 我希望默認情況下總是需要身份驗證,而不僅僅是“foo.bar.com”,所以我的清單中的入口配置看起來像這樣:
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-with-auth
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-type: 'Authentication Required - foo'
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: http-svc
servicePort: 80
---
當我使用kubectl create -f
進行部署時,一切都正常啟動,入口 IP 按預期顯示默認的 nginx 頁面,但它根本不要求提供身份驗證憑據。 為什么不?
不幸的是,您將無法使用默認GKE Ingress使用Ingress authentication
您提供的文檔的鏈接是針對Nginx Ingress Controller
這意味着您需要使用Nginx Ingress
而不是GKE Ingress
。
正如我在評論中提到的,GKE 作為默認入口使用 GCE 提供的入口。 您可以通過比較Nginx Ingress Controller
和GKE Ingress
查看 本教程
在 Google Kubernetes 引擎上,如果元數據部分下沒有定義注釋,則入口資源使用 GCP GCLB L7 負載均衡器來提供流量。 也可以通過將注解的值設置為 gce 來強制執行此方法,如下所示:
annotations: kubernetes.io/ingress.class: gce
如果你想在GKE
上使用Nginx Ingress
,你至少應該做兩件事:
1 . 部署Nginx Ingress Controller
a .) 使用 Helm
$ helm install ingress stable/nginx-ingress --set controller.publishService.enabled=true
如果你很好奇為什么需要指定這個標志,你可以檢查這個 SO 線程。
b .) 使用官方文檔。
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud config get-value account)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml
2 . 指定您要使用Nginx Ingress
。
您可以通過使用注釋來做到這一點:
annotations: kubernetes.io/ingress.class: nginx
例如:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-type: 'Authentication Required - foo'
...
與Nginx Ingress Rewrite非常相似的情況。 由於GKE Ingres
不支持此Nginx
功能,您還需要部署Nginx Ingress
,添加annotation
以使用它並正確配置它。
希望它清除一點。 如果您仍然有問題,請在評論中告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.