如何限制对Kubernetes服务的访问?

时间:2016-07-13 19:25:52

标签: kubernetes

我正在尝试使用以下yaml创建服务。如您所见,我试图限制从10.0.0.0/8范围访问该服务。

apiVersion: v1
kind: Service
metadata: 
  name: nginx-service
spec: 
  ports:
    # the port that this service should serve on
    - port: 443
      targetPort: 443
  # label keys and values that must match in order to receive traffic for this service
  selector: 
    name: nginx
  type: LoadBalancer
  loadBalancerSourceRanges:
  - 10.0.0.0/8

有一些Kubernetes文档(如下所列)讨论了如何使用loadBalancerSourceRanges注释来控制服务访问。

http://kubernetes.io/docs/user-guide/services-firewalls/

但是,当我尝试创建此服务时,我收到如下错误

  

错误验证“sdp-cluster.yaml”:错误验证数据:找到   v1.ServiceSpec的无效字段loadBalancerSourceRanges;如果你   选择忽略这些错误,关闭验证   --validate =假

我查看了v1.ServiceSpec,但也找不到它。

我错过了什么吗?如何限制Kubernetes中服务的流量?

4 个答案:

答案 0 :(得分:5)

GCE,GKE和AWS现在支持此功能。如果提供商不支持,则会被忽略。Kubernetes Doc



apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
    - port: 8765
      targetPort: 9376
  selector:
    app: example
  type: LoadBalancer
  loadBalancerSourceRanges:
  - 10.0.0.0/8




答案 1 :(得分:1)

loadBalancerSourceRanges仅提升为1.3中的字段。它一直是一个名为https://github.com/kubernetes/kubernetes/blob/master/pkg/api/service/annotations.go#L27的注释(好吧,因为该功能存在于1.2中),现在我们已将其推广到字段,因此现已弃用。

请注意,注释/字段是一个whilelist,但它仅适用于受支持的云提供商。如果将其设置为10.0 / 8,则只能从中的kube群集中访问端点(即loadbalancer ip的行为类似于clusterIP)。即使同一个云提供商内的群集外的节点也必须使用NAT来命中公共IP,这意味着数据包上的源IP不会是10个点,因此它不会通过防火墙。您可以将其设置为公共IP,只有该客户端才能访问您的服务。

答案 2 :(得分:1)

我发现只是一个小小的补充,以防任何人遇到同样的问题。似乎Google容器引擎已升级到Kubernetes 1.3,这意味着它无法验证新的loadBalancerSourceRanges语法,但它似乎并没有真正支持新语法,这意味着该字段被忽略。目前,仍然需要设置注释,否则负载均衡器最终会公开发布。

答案 3 :(得分:0)

发现问题并修复它。版本1.2不支持字段&loadBalancerSourceRanges'但它确实支持它作为注释。所以我的yaml固定如下,效果很好。

apiVersion: v1
kind: Service
metadata: 
  name: nginx-service
  annotations: 
    service.beta.kubernetes.io/load-balancer-source-ranges: "a.b.c.d/8, x.y.0.0/24"
spec: 
  ports:
    # the port that this service should serve on
    - port: 443
      targetPort: 443
  # label keys and values that must match in order to receive traffic for this service
  selector: 
    name: nginx
  type: LoadBalancer