kubernetes - nginx ingress - 如何访问

kubernetes - nginx ingress - How to access

我无法从 k8s 集群访问我的应用程序。 使用 nodePort 一切正常。如果我使用入口控制器,我可以看到它已成功创建。我能够ping通IP。如果我尝试 telnet,它说连接被拒绝。我也无法访问该应用程序。我想念什么?我在入口 pod 中没有看到任何异常。

kubectl get ing -n test   
                 
NAME          CLASS    HOSTS   ADDRESS         PORTS   AGE
web-ingress   <none>   *       192.168.0.102   80      44m


ping 192.168.0.102

PING 192.168.0.102 (192.168.0.102) 56(84) bytes of data.
64 bytes from 192.168.0.102: icmp_seq=1 ttl=64 time=0.795 ms
64 bytes from 192.168.0.102: icmp_seq=2 ttl=64 time=0.860 ms
64 bytes from 192.168.0.102: icmp_seq=3 ttl=64 time=0.631 ms
^C
--- 192.168.0.102 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2038ms
rtt min/avg/max/mdev = 0.631/0.762/0.860/0.096 ms

telnet 192.168.0.102 80

Trying 192.168.0.102...
telnet: Unable to connect to remote host: Connection refused

kubectl get all -n ingress-nginx

显示这个

NAME                                            READY   STATUS      RESTARTS   AGE
pod/ingress-nginx-admission-create-htvkh        0/1     Completed   0          99m
pod/ingress-nginx-admission-patch-cf8gj         0/1     Completed   0          99m
pod/ingress-nginx-controller-7fd7d8df56-kll4v   1/1     Running     0          99m

NAME                                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx-controller             NodePort    10.102.220.87    <none>        80:31692/TCP,443:32736/TCP   99m
service/ingress-nginx-controller-admission   ClusterIP   10.106.159.230   <none>        443/TCP                      99m

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ingress-nginx-controller   1/1     1            1           99m

NAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/ingress-nginx-controller-7fd7d8df56   1         1         1       99m

NAME                                       COMPLETIONS   DURATION   AGE
job.batch/ingress-nginx-admission-create   1/1           7s         99m
job.batch/ingress-nginx-admission-patch    1/1           8s         99m

回答

来自 kubectl get ing -n test 的 IP 不是您应该使用的外部可访问地址。

您的 NGINX Ingress Controller Deployment 旁边部署了一个 Service。您可以使用此服务的外部 IP(如果有的话)访问您的 Ingress Controller。

因为您的服务是 NodePort 类型的(并且不显示外部 IP),您必须通过集群的节点 IP 寻址入口控制器 Pods。您需要跟踪 Pod 在哪个节点上,然后找到节点的 IP。这是一个这样做的例子:

NODE=$(kubectl get pods -o wide | grep "ingress-nginx-controller" | awk {'print '})
NODE_IP=$(kubectl get nodes "$NODE" -o wide | grep Ready | awk {'print '})

更多信息

如果您的集群是托管的(即 GKE/Azure/AWS),您可以使用 LoadBalancer 服务来提供外部 IP 来访问 Ingress Controller。