如何在k8s中获取服务的IP/地址

时间:2021-01-07 20:23:43

标签: kubernetes kubernetes-pod

我想创建服务 A(redis 实例)和服务 B(应用程序)。

应用程序想要使用服务 A (redis)。

如何在不暴露于互联网的情况下自动获取 k8s 集群内服务 A 的一些地址/url?

类似于:

redis://service-a-url:6379

我不知道我应该使用哪种 k8s 技术。

1 个答案:

答案 0 :(得分:0)

例如,您的 redis 服务应如下所示:

apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    run: redis
spec:
  ports:
  - port: 6379
    targetPort: 6379
    protocol: TCP
  selector:
    run: redis

服务类型为ClusterIP(因为如果您不在yaml文件中指定服务类型默认为ClusterIP类型),您不必从集群外部访问服务。有更多类型的服务 - 在此处查找信息:services-kubernetes

看一看:connecting-app-serviceapp-service-redis

Kubernetes 支持两种查找服务的模式 - 环境变量和 DNS。 Kubernetes 有一个特定的 DNS 集群插件服务,可以自动将 DNS 名称分配给其他服务。

集群中创建的每个服务都有自己分配的 DNS 名称。默认情况下,客户端 Pod 的 DNS 搜索列表将包括 Pod 自己的命名空间和集群的默认域。最好通过示例来说明这一点:

假设 Kubernetes 命名空间 example 中有一个名为 ns 的服务。在命名空间 ns 中运行的 Pod 可以通过简单地对 example 执行 DNS 查询来查找此服务。在命名空间 test 中运行的 Pod 可以通过对 example.ns 执行 DNS 查询来查找此服务。

在此处查找更多信息:Kubernetes DNS-Based Service Discoverydns-name-service

您将能够使用以下记录访问集群内的服务:

  • <service>.<ns>.svc.<zone>. <ttl>

例如:redis.default.svc.cluster.local