手动创建未与Service关联的EndpointSlice资源



我试图在集群a上创建一个指向集群B的IP地址的服务。我没有集群B的域名,所以不能使用ExternalName。我尝试这样做的方式是通过在集群a上创建一个没有选择器的服务,并为该服务手动创建一个EndpointSlice资源,该资源将指向集群b。根据Kubernetes文档,我需要通过设置Kubernetes将EndpointSlice链接到服务。该EndpointSlice上的/service-name标签。"但是,即使这样做了,我的服务显然没有端点。

代码endpointslice.yaml

apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: hack-svc-1
labels:
kubernetes.io/service-name: hack-svc
kubernetes.io/managed-by: manual
addressType: IPv4
ports:
- port: 80
endpoints:
- addresses:
- "cluster B's IPv4 address here"
conditions:
ready: true

service.yaml

apiVersion: v1
kind: Service
metadata:
name: hack-svc
spec:
ports:
- port: 80

Afterkubectl describe service hack-svc:

Name:              hack-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                <IPv4 address here>
IPs:               <IPv4 address here>
Port:              http  80/TCP
TargetPort:        80/TCP
Endpoints:         <none>        <-- No endpoints??
Session Affinity:  None
Events:            <none>

我如何将EndpointSlice与我的服务关联?

secavfr在SO上发布了一个据说有效的例子。
当我尝试这个时,我也发现没有创建端点。示例是Kubernetes 1.26和NGINX 1.7,但我在Kubernetes 1.25和NGINX入口控制器v1.8.0 NGINX版本:NGINX/1.21.6在GKE自动驾驶集群。

我怀疑版本之间的语法有一些细微的变化,但我还没有找到解决方案。也许还需要创建端点?

kubectl -n namespace describe endpointslice hack-svc-1

返回端点,但它们不与服务关联?

更改IP地址并重新申请会导致服务重新配置,但IP地址会在任何接口中报告。

endpointslice.discovery.k8s.io/my-service-1 configured

我也尝试使用端点而不是EndPointSlice,但它给出了非常相似的结果。

然后我尝试ExternalIP服务类型。我试着用

来启用它们
gcloud beta container clusters update my-cluster --enable-service-externalips 

错误结果为

GKE Warden rejected the request because it violates one or more constraints.
Violations details: {"[denied by autopilot-external-ip-limitation]":["service external IPs are forbidden in Autopilot due to CVE-2020-8554: [10.101.0.17]"]}

GKE Autopilot在响应CVE-2020-8554时禁用externalip,但我不知道这是否适用于此问题。

EndpointSlice API是端点API的可伸缩和可扩展替代方案。EndpointSlices从服务的pod中收集IP地址、端口、准备情况和拓扑等信息。遵循本教程,并在为集群配置EndpointSlices时验证是否有任何不匹配,它在我的案例中有所帮助。

最新更新