0

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

我有一个可以访问的 API 服务http://[api_service_name]:3000和一个简单的 nginx 网关服务,proxy_passhttp://[gateway_service_name]:80http://[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 地址,我不确定这是否是正确的方法,但现在会保持这样

4

1 回答 1

1

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

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

如果 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_endpointsorhttp://10.128.0.3/any_available_endpoints或 or连接到您的服务http://10.128.0.4/any_available_endpoints

于 2017-05-02T14:30:35.660 回答