首页 > 解决方案 > Kubectl 创建服务类型负载均衡器(在 GCP 上但添加标志 Global?)

问题描述

我已经为我的微服务创建了负载均衡器,使用这个模板:,一切都很好并且可以工作,但想要以某种方式添加global标志(当你通过 gcp 控制台创建 lb 时,你可以选择添加它)以满足应用程序功能的期望,确实有人知道我还需要添加什么其他标志吗?

apiVersion: v1
kind: Service
metadata:
  name: my-app-jmprlb
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: my-app
    env: dev
spec:
  type: LoadBalancer
  selector:
    app: my-app
    env: dev
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
  loadBalancerIP: 10.10.10.10
  externalTrafficPolicy: Local

编辑:我从谷歌文档中找到了一些不错的注释,似乎可以解决问题,https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balance-ingress

# web-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hostname
  namespace: default
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
spec:
  ports:
  - name: host1
    port: 80
    protocol: TCP
    targetPort: 9376
  selector:
    app: hostname
  type: NodePort

# internal-ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ilb-demo-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "gce-internal"
spec:
  backend:
    serviceName: hostname
    servicePort: 80

标签: google-cloud-platformkubectl

解决方案


如果你想让它成为一个全局的LoadBalancer,可以从你的集群外部通过公共 IP 访问,你可以使用:

apiVersion: v1
kind: Service
metadata:
  name: my-app-jmprlb
  labels:
    app: my-app
    env: dev
spec:
  type: LoadBalancer
  selector:
    app: my-app
    env: dev
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

请注意,注释cloud.google.com/load-balancer-type: "Internal"意味着您的服务只能通过与集群所在子网对等的子网访问。


推荐阅读