当前位置: 首页 > 知识库问答 >
问题:

Nginx入口控制器如何在库伯内特斯上工作?

关志勇
2023-03-14

具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址?

这两个IP地址用于LoadBalancer类型的入口资源和服务资源:

> kubectl get ingress
NAME            HOSTS                            ADDRESS        PORTS     AGE
nginx-ingress   example.com                      1.1.1.1        80, 443   1d
> kubectl get service
NAME                            TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
hello-app                       ClusterIP      10.31.251.77    <none>          8080/TCP                     1d
kubernetes                      ClusterIP      10.31.240.1     <none>          443/TCP                      1d
nginx-ingress-controller        LoadBalancer   10.31.246.62    2.2.2.2         80:32603/TCP,443:31763/TCP   1d
nginx-ingress-default-backend   ClusterIP      10.31.241.48    <none>          80/TCP                       1d

以下是我的想法:

User
 ^
 |
Service resource of type LoadBalancer <-- Ingress annotated as class nginx
 ^
 |
Pod resource with Nginx acting as ingress controller
 ^
 |
Service resource of type ClusterIP
 ^
 |
Pod resource with server serving message at /hello

这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它

annotations:
  kubernetes.io/ingress.class: nginx

谷歌应该承认这一点,因为我不想让Ingress资源使用他们的付费L7 HTTP负载平衡器,而是我自己的Nginx控制器。

我注意到我的hello页面可以通过负载平衡器的IP地址访问,但访问入口地址会导致连接尝试被拒绝错误。但是,入口资源具有主机设置和tls设置。那么,我应该将TLS证书与哪个资源相关联?当入口资源是可以访问我的网站的负载均衡器IP时,为什么它要指定域名?

共有1个答案

祁刚毅
2023-03-14

我不太理解你的问题,我相信你对入口资源有点困惑。

在您运行完教程后,让我解释一下:

helm install --name nginx-ingress stable/nginx-ingress --set rbac.create=true
kubectl apply -f ingress-resource.yaml

您将出现以下情况:

$ kubectl get services
NAME                            TYPE           CLUSTER-IP     EXTERNAL-IP         PORT(S)                      AGE
nginx-ingress-controller        LoadBalancer   10.11.245.77   external-ip-ONE     80:32172/TCP,443:31908/TCP   12m

$ kubectl get ingress
NAME               HOSTS     ADDRESS           PORTS     AGE
ingress-resource   *         external-ip-TWO   80        1m

检查正在使用的外部IP时,您会注意到:

>

  • exout-ip-ONE-对应于转发规则,因此它是您将在负载均衡器页面中看到的IP

    外部ip 2-对应于POD入口控制器运行的虚拟机的相同ip

    因此,不会“浪费”额外的IP。基本上,您连接到入口控制器,该控制器根据入口资源的规范将流量重定向到不同的后端。

  •  类似资料:
    • 我在K8S集群中面临一个奇怪的问题 基本上我有两个应用程序: identity manager(基于WSO2,但该问题与WSO2无关) 将管理X509身份验证的外部SAML2 IDP 为了使用这个外部SAML2 IDP,我配置了WSO2 当我尝试通过X509登录时,WSO2显示登录页面,我单击智能卡,重定向到外部SAML IDP。 在这种情况下,nginx入口为我提供了502个坏网关。如果我复制U

    • 新来的。我想知道是否有人可以帮助我区分我可以用来识别入口控制器和通过YAML和服务识别入口的特征。我有一个预先存在的集群,我认为入口控制器可能是通过helm安装的,但我不确定。有没有办法了解helm在安装nginx ingress控制器时使用的yaml?

    • 我试图更改client\u max\u body\u size值,因此我的nginx入口不会返回413错误。 我测试了一些解决方案。 这是我的测试配置图: 这些更改根本没有效果,加载后,在nginx控制器日志中,我可以看到有关重新加载配置映射的信息,但可以看到nginx中的值。形态相同: 我的nginx控制器配置使用以下图像:quay.io/kubernetes-ingres-controller

    • 我已经研究Kubernetes几个星期了,并使用kube lego NGINX示例(https://github.com/jetstack/kube-lego)已使用DigitalOcean上的Rancher成功地将服务部署到Kubernetes群集。 我已经部署了示例静态站点、Wordpress、Laravel、Craft CMS等。所有这些都使用自定义命名空间、部署、秘密、具有外部注册表的容器

    • 我在AKS上部署了Kubernetes 1.8.7集群。我正在尝试使用帮助安装NGINX入口控制器(helm install stable/NGINX入口——名称空间kube系统)。I init helm使用helm init——服务帐户默认值。我遇到以下错误 错误:release my release失败:clusterroles.rbac.authorization.k8s。io“my rel

    • 我的公司有一个伪造的CA证书。实例com和一张伪造地图的唱片。实例com连接到我们的负载平衡器的IP 负载平衡器正在将流量转发到我们的Kubernetes群集。 在集群中,我部署了nginx ingress helm图表,在30200处公开了https节点端口 我根据上述证书创建了一个名为test secret的k8s TLS机密。 我部署了一个带有服务“test”的应用程序,并安装了以下入口: