我对使用Kubernetes的Nginx入口感到困惑。我已经可以将其与“ basic nginx auth”一起使用(尚不能与oauth2
一起使用)。
我已经通过头盔安装了
helm install stable/nginx-ingress --name app-name --set rbac.create=true
这将创建两个服务,一个nginx-ingress-controller
和一个nginx-ingress-backend
。
创建入口时,此入口仅针对一个nginx-ingress-controller
,但我不知道如何:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tomcat
annotations:
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required - foo"
nginx.ingress.kubernetes.io/rewrite-target: /
namespace: kube-system
spec:
rules:
- host:
http:
paths:
- path: /
backend:
serviceName: tomcat-deployment-service
servicePort: 8080
当我从kubectl get ingress -n kube-system
的输出获得此Ingress时,它具有公共的外部IP。
有关 的是,basic-auth
未应用于该外部IP ;它是敞开的!仅当我尝试访问nginx-ingress-controller
的IP时,Nginx身份验证才会启动。
我有很多问题。
kubectl apply -f
ingress.yaml
创建的入口定位到特定的nginx-ingress-controller?ingress
使用外部IP?nginx
身份验证?nginx-ingress-controller
或
生成一个?)我一直在寻找文字天的血统,工作实例(以及稀疏的文档,不断变化的文档和github问题)。
编辑:
在这个“官方” documentation中,尚不清楚http://10.2.29.4/
是来自ingress
还是controller
的IP。我假设使用controller
是因为当我运行此命令时,另一个甚至都不进行身份验证(无需输入密码即可让我进入)。我正在使用的两个IP都是GCP上的外部IP(公开可用)。
答案 0 :(得分:1)
我认为您可能对概念定义有些误解。
shift
是类型为meta
的服务,其后有实际运行的Pod,可简化您为集群创建的入口规则。Nginx-ingress-controller
可能是Loadbalancer
会路由到的Nginx-ingress-backend
,如果找不到匹配的路由。参见this default-backend
应该是集群中的唯一条目。群集中的其他服务应具有类型nginx-ingress-controller
,这样它们就不会暴露在群集外部,只能通过您的nginx-ingress-controller
进行访问。在这种情况下,由于您的服务可以直接从外部访问,因此它的类型不应为ClusterIP
。只需更改服务类型即可对其进行保护。基于上述理解,我很乐意为您遇到的问题提供进一步的帮助。
一些读数: