Kubernetes Helm Redis Google Cloud MemoryStore - 服务与端点

Kubernetes Helm Redis Google Cloud MemoryStore - Service vs Endpoint

我正在为 K8s 中的 Sidekiq 和 Rails 配置 Redis。使用具有 IP 地址的 Google Cloud Memory Store。

我有一个如下所示的 helm 模板(单独指定了 gcpRedisMemorystore)- 我的问题是服务对象向系统添加了什么?是否有必要或端点是否提供所有需要的访问权限?

charts/app/templates/app-memorystore.service.yaml

kind: Service
apiVersion: v1
metadata:
  name: app-memorystore
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - name: redis
    port: {{ .Values.gcpredis.port }}
    protocol: TCP
---
kind: Endpoints
apiVersion: v1
metadata:
  name: app-memorystore
subsets:
- addresses:
  - ip: {{ .Values.gcpredis.ip }}
  ports:
  - port: {{ .Values.gcpredis.port }}
    name: redis
    protocol: TCP

是的,你仍然需要它。

一般来说,服务是应用程序连接到端点所使用的名称。通常,带有选择器的服务会自动创建一个对应的端点,该端点具有选择器找到的 Pods 的 IP 地址。

当你在没有选择器的情况下定义一个服务时,你需要给相应的同名端点,这样服务才有地方去。这条信息在文档中,但有点隐藏。在 https://kubernetes.io/docs/concepts/services-networking/service/#without-selectors,在没有选择器的无头服务的第二个要点中提到了它:

For headless services that do not define selectors, the endpoints controller does not create Endpoints records. However, the DNS system looks for and configures either:

  • CNAME records for ExternalName-type services.
  • A records for any Endpoints that share a name with the service, for all other types.