我想创建服务 A(redis 实例)和服务 B(应用程序)。
应用程序想要使用服务 A (redis)。
如何在不暴露于互联网的情况下自动获取 k8s 集群内服务 A 的一些地址/url?
类似于:
redis://service-a-url:6379
我不知道我应该使用哪种 k8s 技术。
答案 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-service,app-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 Discovery、dns-name-service。
您将能够使用以下记录访问集群内的服务:
<service>.<ns>.svc.<zone>. <ttl>
例如:redis.default.svc.cluster.local