【发布时间】:2021-09-27 03:16:50
【问题描述】:
我的 GKE 集群在端口 80 上提供内容服务。如何让负载平衡器服务在外部(区域保留)静态 IP 111.222.333.123 上提供内容?
我看到kubectl get service显示外部静态IP注册成功。外部 IP 确实响应 ping 请求。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.16.0.1 <none> 443/TCP 17h
myapp-cluster NodePort 10.16.5.168 <none> 80:30849/TCP 84m
myapp-service LoadBalancer 10.16.9.255 111.222.333.123 80:30879/TCP 6m20s
此外,Google Cloud Platform 控制台显示转发规则已建立并正确引用 GKE 目标池。
我正在使用的部署和服务清单如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
environment: sandbox
template:
metadata:
labels:
app: myapp
environment: sandbox
spec:
containers:
- name: myapp
image: myapp
imagePullPolicy: Always
ports:
- containerPort: 8080
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
environment: sandbox
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
loadBalancerIP: "111.222.333.123"
相关的skaffold配置文件供参考:
apiVersion: skaffold/v2beta18
kind: Config
metadata:
name: myapp
build:
artifacts:
- image: myapp
context: .
docker: {}
deploy:
kubectl:
manifests:
- gcloud_k8_staticip_deployment.yaml
在使用 Google Cloud Code 运行此配置时,我缺少什么以允许流量到达 GKE 集群?
如果之前有人问过这个问题,我们深表歉意。如果我在复习问题时错过了正确的解决方案,很乐意指点。
【问题讨论】:
-
我不是 GKE 上的导出,但我认为您的服务当前正在侦听 111.222.333.123:30879,因为这是为您的负载均衡器服务分配的端口。通常工作流程是在 Kubernetes 上设置一个入口控制器。通过负载均衡器类型服务公开它。这应该创建一个指向入口控制器的谷歌负载均衡器。然后定义入口资源,将流量路由到您的内部服务,您的应用程序应该可以通过“loadbalancer-url/path-defined-in-ingress”访问
-
我特别想避免 Ingress 并使用此处描述的“使用服务”方法:cloud.google.com/kubernetes-engine/docs/tutorials/…
-
我不确定我能不能帮到你很多。但是,由于您服务的类型 LoadBalancer,谷歌应该为您创建一个负载均衡器。你能确认一下吗?并尝试访问它?
-
是的,负载平衡器已启动并正在运行,IP 在那里并在外部路由。 Google Cloud Platform 还在创建正确的引用,将外部 IP 与内部 GKE 链接起来。但是,仍然没有 HTTP 流量通过网络。
-
hmmm 不幸的是,我在这里不知所措。我猜是一些 GKE 专家拯救这一天的时间。抱歉,我无法提供更多帮助
标签: kubernetes networking google-cloud-platform google-kubernetes-engine google-cloud-code