【问题标题】:Kubernetes internal load balancer on gcloudgcloud 上的 Kubernetes 内部负载均衡器
【发布时间】:2017-05-02 10:43:04
【问题描述】:

我可能会在这里问一个错误的问题,但我正在尝试创建一个像这样的内部负载均衡器

我有一个http://[api_service_name]:3000 可以访问的 API 服务和一个简单的 nginx 网关服务,代理_pass http://[gateway_service_name]:80 到 http://[api_service_name]:3000

我的 API 服务 service.yaml 文件是

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    service: api-service-name
  name: api-service-name
spec:
  ports:
  - name: "3000"
    port: 3000
    targetPort: 3000
  selector:
    service: api-service-name
status:
  loadBalancer: {}

而我的 API 服务 deployment.yaml 文件是

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  name: api-service-name
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        service: api-service-name
    spec:
      containers:
      - env:
        ...
        image: ...
        name: api-service-name
        ports:
        - containerPort: 3000
        resources: {}
      restartPolicy: Always
status: {}

而我的 nginx service.yaml 是

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    service: gateway-service-name
  name: gateway-service-name
spec:
  ports:
  - name: "80"
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    service: gateway-service-name
  type: LoadBalancer
  externalName: gateway-service-name
status:
  loadBalancer: {}

deployment.yaml 是

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  name: gateway-service-name
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        service: gateway-service-name
    spec:
      containers:
      - image: ...
        name: gateway-service-name
        ports:
        - containerPort: 80
        resources: {}
      restartPolicy: Always
status: {}

这些设置适用于外部负载平衡器/网关。当我做kubectl get svc 时,它会打印出来

NAME                  CLUSTER-IP                EXTERNAL-IP      
gateway-service-name  gateway.int.ip.add.ress   gateway.ext.ip.add.ress
api-service-name      api.int.ip.add.ress       <none>

我可以浏览http://gateway.ext.ip.add.ress/any_available_endpoints就好了

我想弄清楚是否可以在不必为网关设置外部 IP 地址的情况下实现相同的目标,并改用http://gateway.int.ip.add.ress/any_available_endpoints

我尝试使用默认的 ClusterIp ServiceType 但它不起作用

注意:我将通过 vpn 访问网络,并且位于另一个集群上的另一个服务将在内部访问它

更新:我最终将我的客户端(网络)放在同一个集群中,这样我的网关不必有外部 IP 地址,我不确定这是否是正确的方法,但会保持这样暂时

【问题讨论】:

    标签: kubernetes gcloud internal-load-balancer


    【解决方案1】:

    A ClusterIP Service 只能从同一集群中的其他服务访问,因此如果您的服务在 ClusterA 中,而您的 VPN 在 ClusterB 中,VPN 将无法以 ClusterIP @ 的身份访问它987654326@.

    一种选择是继续使用带有LoadBalancer Service 的公共IP,并使用Service (https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/) 上的loadBalancerSourceRanges 设置将防火墙配置为仅来自您的VPN 的流量

    如果 ClusterA 和 ClusterB 都在同一个网络上(这是新集群的默认设置),您可以选择使用 type: NodePort 作为您的 Service。这将在 ClusterA 中每个节点的静态端口上公开服务,而无需在默认防火墙中打开任何端口。

    如果 ClusterA 的节点具有 IP 10.128.0.2、10.128.0.3 和 10.128.0.4,并且您像这样配置 Service

    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: null
      labels:
        service: gateway-service-name
      name: gateway-service-name
    spec:
      ports:
      - name: "80"
        port: 80
        nodePort: 80
        protocol: TCP
        targetPort: 80
      selector:
        service: gateway-service-name
      type: NodePort
      externalName: gateway-service-name
    

    那么您应该可以通过http://10.128.0.2/any_available_endpoints 或http://10.128.0.3/any_available_endpoints 或http://10.128.0.4/any_available_endpoints 连接到您的服务

    【讨论】:

    • 我用你的建议做了一个快速的尝试,我得到了这个错误spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767,我用谷歌搜索了这个,我碰到了github.com/kubernetes/kubernetes/issues/…,我认为它说我们不应该将它静态设置为避免冲突?通过节点 IP,您是指我的服务 clusterIP 还是我的 pod ip?所以我尝试删除 nodePort 并应用更改,然后我尝试了两个 IP,但仍然无法正常工作
    • 我最终将我的客户端放在同一个集群中,这样我的网关就不必有外部 IP 地址,我不确定这是否是正确的方法,但现在会保持这样
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 2019-05-27
    • 1970-01-01
    • 2016-12-30
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多