我正在尝试使用以下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中服务的流量?
答案 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