我有一个带负载均衡器的GKE服务,但我想在其他服务内部使用它,例如我希望不将公共IP分配给它
是否可以在没有私有VPN的情况下使用防火墙设置?
所有其他负载平衡(如kube-dns
)功能都很有效,而且我的Container Engine中的服务不需要公共IP
所有节点都位于相同的区域和区域,因此我不需要也不关心多区域功能
答案 0 :(得分:5)
GKE现在支持Internal Load Balancing:
apiVersion: v1
kind: Service
metadata:
name: [SERVICE-NAME]
annotations:
cloud.google.com/load-balancer-type: "Internal"
labels:
app: echo
spec:
type: LoadBalancer
loadBalancerIP: [IP-ADDRESS]
ports:
- port: 9000
protocol: TCP
selector:
[KEY]: [VALUE]
注意注释:cloud.google.com/load-balancer-type: "Internal"
。
这将创建一个LoadBalancer服务,其中包含可在您的VPC中路由的专用IP地址。
Bitnami也有一篇很棒的博文: creating-private-kubernetes-clusters-on-gke
答案 1 :(得分:3)
在您的问题的背景下,我的其他服务内部是否"以及#34;表示" Kubernetes服务在同一个集群中运行"或者"在GCE中运行但在Kubernetes集群之外运行的其他应用程序"。
Kubernetes" Service"即使资源未设置为LoadBalancer
,资源也会进行负载平衡。因此,如果您只需要将此服务公开给在Kubernetes中运行的其他应用程序,则可以将服务的spec.type
设置为ClusterIP
。来自文档:
ClusterIP:在集群内部IP上公开服务。选择此值使服务只能从群集中访问。
如果您需要将此服务公开给Kubernetes以外的应用程序,则需要将spec.type
设置为LoadBalancer
,这将为其分配公共IP。使用spec.loadBalancerSourceRanges
的简单防火墙规则使防火墙配置相对容易。你可以在这里阅读更多相关信息:
https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/