TLDR:如果您想在 3000 以下的端口上提供您的网站/网络服务,那么不,这是不可能的。如果有人找到一种方法来做到这一点,我很想知道怎么做。
我尝试在低于 3000 的端口上提供服务时使用的两种主要方法包括:
如果您可以在 3000 以上的端口上提供服务,请参阅下面的说明。
如何删除 LoadBalancer(仅允许在大于 3000 的端口上提供服务)
我试过删除我的 LoadBalancer,这是我能想到的最好的解决方案。它有以下缺陷:
- 用于访问网页的端口不是通常的 80 和 443,因为从节点公开这些端口并非易事。如果我弄清楚了,我稍后会更新。
以及以下好处:
- 没有负载平衡器。
- 网站/网络服务的 IP 是静态的。
- 它依赖于流行的
nginx-ingress
舵图。
- 它使用
ingress
, 允许完全控制如何services
根据请求的路径将请求路由到您。
1.安装入口服务和控制器
假设您已经安装了 Helm(如果您不按照此处的步骤操作:在 GKE 上安装 Helm),请nginx-ingress
使用type
.NodePort
helm install \
--name nginx-ingress \
stable/nginx-ingress \
--set rbac.create=true \
--set controller.publishService.enabled=true \
--set controller.service.type=NodePort \
--set controller.service.nodePorts.http=30080 \
--set controller.service.nodePorts.https=30443
2. 创建入口资源
为您的路由创建入口定义。
# my-ingress-resource.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: reverse-proxy
namespace: production # Namespace must be the same as that of target services below.
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false" # Set to true once SSL is set up.
spec:
rules:
- http:
paths:
- path: /api
backend:
serviceName: backend
servicePort: 3000
- path: /
backend:
serviceName: frontend
servicePort: 80
然后安装它
kubectl apply -f my-ingress-resource.yaml
3.创建防火墙规则
找到您的集群的标签。
gcloud compute instances list
如果您的集群实例的名称类似于
gke-cluster-1-pool-1-fee097a3-n6c8
gke-cluster-1-pool-1-fee097a3-zssz
那么你的集群标签是gke-cluster-1-pool-1-fee097a3
.
转到GCP 防火墙页面。确认您在导航栏中选择了正确的项目。
单击“创建防火墙规则”。给规则起一个像样的名字。您可以将大部分设置保留为默认值,但在“目标标签”下超过您的集群标签。将源 IP 范围设置为0.0.0.0/0
。在协议和端口下,将“全部允许”更改为“指定的协议和端口”。选中 TCP 框,然后30080, 30443
输入输入字段。点击“创建”。
4.创建静态IP
转到https://console.cloud.google.com/networking/addresses/并单击“保留静态地址”。给它一个描述性的名称,然后选择正确的区域。选择正确的区域后,您应该能够单击“附加到”下拉菜单并选择您的 Kubernetes 节点之一。点击“预订”。
5.测试配置
保留静态 IP 后,通过查看外部 IP 地址列表找出授予了哪个静态 IP 。
将其复制到浏览器中,然后添加一个端口(<your-ip>:30080
用于 HTTP 或https://<your-ip>:30443
HTTPS)。您应该看到您的网页。