我当时使用NodePort在Google Container Engine(GKE)上托管一个Webapp。它使您可以直接将域指向节点IP地址,而不必使用昂贵的Google负载均衡器。不幸的是,实例创建时默认情况下阻止了HTTP端口,并且更新锁定手动更改了节点,因为它们现在是使用实例组/和不可变实例模板创建的。
我需要在节点上打开端口443,如何使用Kubernetes或GCE做到这一点?最好采用抗更新的方式。
相关的github问题:https://github.com/nginxinc/kubernetes-ingress/issues/502
答案 0 :(得分:1)
在Kubernetes节点上使用端口443不是标准做法。如果您查看docs,则会看到kubelet选项--service-node-port-range
,其默认值为30000-32767
。您可以将其更改为443-32767
或其他名称。请注意,1024
下的每个端口都限于root。
总而言之,在端口443
上运行Kubernetes服务不是一个好主意/做法。一个更典型的场景是将流量发送到服务的NodePort的外部nginx / haproxy代理。您提到的另一个选项是使用云负载均衡器,但是由于成本原因,您希望避免这种情况。
答案 1 :(得分:1)
您可以使用Cloud SDK在GUI Google Cloud Console上完成所有操作,最简单的方法就是通过Google Cloud Shell。这是用于将网络标签添加到正在运行的实例的命令。即使GUI禁用了此功能,此方法仍然有效
gcloud compute instances add-tags gke-clusty-pool-0-7696af58-52nf --zone=us-central1-b --tags https-server
这也适用于Beta版,这意味着它应该继续工作一段时间。 有关如何自动执行此操作的示例,请参见https://cloud.google.com/sdk/docs/scripting-gcloud。也许考虑在检测到停机时间时在Webhook上运行。显然,这都不是理想的。
或者,您可以自己更改模板。使用此方法,您还可以将启动添加到新节点,这允许您执行诸如使用新IP地址来启动Webhook的操作,以实现轮循低停机时间动态dns。
来源(他有相反的问题,他的问题是我们的解决方案):https://stackoverflow.com/a/51866195/370238
答案 2 :(得分:0)
如果我理解正确,如果节点可以自行销毁和重新创建,那么您将如何确保生产后端口上的某些服务可靠地可用,而无需任何负责路径编排的负载均衡器来转移端口流量到新节点