首页 文章

Nginx Ingress控制器如何在Kubernetes上运行?

提问于
浏览
1

具体来说,当我在Google网站上关注directions以在GKE上设置nginx入口时,为什么我最终会得到两个外部IP地址?

这两个IP地址用于Ingress资源和LoadBalancer类型的Service资源:

> 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(并且不需要花费任何资金!) . 我希望Ingress(尽管它的名字)没有外部IP,因为我用注释标记它

annotations:
  kubernetes.io/ingress.class: nginx

谷歌应该承认,我不希望Ingress资源使用他们付费的L7 HTTP负载均衡器,而是我自己的Nginx控制器 .

我注意到我的 /hello 页面可以通过负载均衡器访问's IP address, but accessing the ingress'地址给出连接尝试拒绝错误 . 但是,Ingress资源具有 host:tls: 设置 . 那么我将哪个资源与我的TLS证书相关联?为什么Ingress资源在可以访问我的网站的LoadBalancer IP时指定域名?

1 回答

  • 1

    我真的不明白你的问题,我相信你对入口资源有点困惑 .

    在教程中运行之后,让我解释一下:

    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,您会注意到:

    • external-ip-ONE - 对应转发规则,因此它是您将在Load Balancer页面中看到的IP

    • external-ip-TWO - 对应于正在运行POD ingress controller 的虚拟机的相同IP

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

相关问题