如何在Kubernetes中配置Ingress-nginx?

时间:2018-10-03 00:04:42

标签: nginx kubernetes kubernetes-ingress

我正在测试Kubernetes集群版本1.11,需要使POD可以由主服务器IP和POD端口(在本例中为通过端口80的nginx映像)从外部访问,并且我试图启用和配置Ingress -nginx以获得此访问权限。

要运行测试,我使用以下命令将ingress-nginx添加到了集群中:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

然后,我尝试按照此示例中的说明创建一个入口: https://koudingspawn.de/install-kubernetes-ingress/-我只是没有做Digital Ocean的LoadBalancer部分。

碰巧它不起作用,我无法访问配置的IP或主机,因此,我怀疑是否在集群中正确添加了ingress-nginx,如果该示例失败或如果我必须走另一条路?

2 个答案:

答案 0 :(得分:1)

两种规范方法都无法完全满足您的需求。

典型的解决方案涉及使用LoadBalancer服务类型或NodePort,然后手动配置网络LB以指向NodePort服务的端口。

我将在这里做出3个假设:

  • 您没有可用的LB服务,因此您想通过HTTP(S)连接到主服务器的IP
  • 您的主服务器在6443等端口上托管kube api,或者您要用于网络流量的80/443以外的其他任何主机
  • 您正在谈论单个主机并将其用于流量。这是很明显的SPOF,所以我认为您不太关心HA

请记住,您需要调整入口部署以适合您的需求。

其网络名称空间中的Nginx入口侦听标准端口(80/443)。如果不是使用Service来运行tham,而是使用hostNetwork: true来运行tham,那么您会看到入口直接在80/443上侦听。为了确保它在您的主服务器上运行,您需要允许它在主服务器上调度(可能是通过容忍),并确保它在主服务器上调度,而不是在其他某个节点(nodeSelector / NodeAffinity或DaemonSet)上调度,以便在每个节点上运行它群集中

另一种解决方案可以是实际上采用规范的方式并使入口侦听某些节点端口,然后让另一块软件作为负载均衡器部署,以通过kube(hostNetwork)或完全自主机制(即作为systemd服务单元),它将侦听80/443并通过tcp将流量转发到节点端口。

答案 1 :(得分:0)

我不确定您遇到什么错误,发布这些错误会有所帮助,但是从此开始是正确的:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
如nginx入口控制器在main documentation page中所述。如果您使用的是Digital Ocean,则可以按照NodePort/Bare-metal instructions进行操作,因为尚不支持Digital Ocean负载均衡器。

之后,您要检查您的nginx入口控制器是否正在运行:

$ kubectl -n ingress-nginx get pods
NAME                                        READY     STATUS    RESTARTS   AGE
default-http-backend-xxxxxxxxxx-xxxxx       1/1       Running   0          1h
nginx-ingress-controller-xxxxxxxxxx-xxxxx   1/1       Running   0          1h

您还可以查看日志:

$ kubectl -n ingress-nginx nginx-ingress-controller-xxxxxxxxxx-xxxxx

然后,您可以创建一个Ingress和一个Service来为Ingress服务。

然后,您可以使用kubernetes.io/ingress.class: "nginx"批注创建使用该Ingress的任何部署和服务。