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。
我无法从 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。