kubernetes - Nginx 入口库
问题描述
我对 Kubernetes 的 nginx 入口感到困惑。我已经能够将它与“basic nginx auth”一起使用(目前还不能这样做oauth2
)。
我已经通过 helm 安装:
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
当我从 的输出中获得这个 Ingress 时kubectl get ingress -n kube-system
,它有一个公共的外部 IP。
令人担忧的是,它不适basic-auth
用于该外部 IP;它是敞开的!Nginx 身份验证仅在我尝试访问nginx-ingress-controller
的 IP 时启动。
我有很多问题。
- 如何从
kubectl apply -f ingress.yaml
目标特定的 nginx-ingress-controller 创建入口? - 我如何防止这个新
ingress
IP拥有外部IP? - 为什么不
nginx
启动身份验证? - 我想使用什么IP(
nginx-ingress-controller
还是生成的?) - 如果我想使用生成的 IP,那么来自控制器的 IP 呢?
几天来,我一直在寻找血统、工作示例(并倾注于稀疏、不断变化的文档和 github 问题)。
编辑:
在这个“官方”文档中,不清楚天气http://10.2.29.4/
是否是来自ingress
或controller
. 我假设是controller
因为当我运行它时,另一个甚至没有进行身份验证(它让我在不要求密码的情况下进入)。我使用的两个 IP 都是 GCP 上的外部 IP(公开可用)。
解决方案
我想你可能对概念定义有一些误解。
- Ingress 不是工作(也不是服务,也不是 pod)。这只是一个配置。它不能有“IP”。将入口视为集群中的路由规则或路由表。
Nginx-ingress-controller
Loadbalancer
是具有实际运行 pod的类型的服务,它有助于您为集群创建的那些入口规则。Nginx-ingress-backend
如果没有找到匹配的路线,很可能是default-backend
您将要前往的路线。nginx-ingress-controller
看到这个- 通常,您
nginx-ingress-controller
应该是集群的唯一条目。集群中的其他服务应该具有这样的类型ClusterIP
,即它们不会暴露在集群外部,并且只能通过您的nginx-ingress-controller
. 在您的情况下,由于您的服务可以直接从外部访问,因此它不应该是ClusterIP
. 只需更改服务类型即可对其进行保护。
基于以上理解,我很乐意为您的问题提供进一步的帮助。
一些读物:
推荐阅读
- python - Django - Postgress - 仅在不存在时自动创建实例
- swift - 观察系统体积变化 OSX - Swift
- office-js - 带有 VSCode 的 Office 加载项 - 起始文档
- postgresql - PostgreSQL 9.6 全文搜索的短语频率计数器
- c# - FileSystemWatcher Not recognizing change in directory
- mysql - 在mysql中创建逻辑表达式以从表中提取数据
- mysql - MySQL查询未提供所需的输出
- gradle - 使用 Kotlin MPP 插件时,简单和源集依赖之间有什么区别?
- python - 使用字符串值进行数据帧切片
- python - 如何改进/修改特征匹配的参数 - SIFT SURF - Opencv