Kubernetes Pod与本地主机端口对话 [英] kubernetes pod talking to a localhost port

查看:13
本文介绍了Kubernetes Pod与本地主机端口对话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个芹菜实例运行在本地Kubernetes集群的Pod中,而它连接到的redis服务器/代理是在我的本地主机上启动的:6379,没有Kubernetes。如何让我的K8 Pod与本地部署的Redis对话?

推荐答案

您可以使用运行Redis服务器的节点的静态定义的IP地址创建Headless ServiceEndpoint


我已经创建了一个示例来向您说明它是如何工作的。

首先,我创建了Headless ServiceEndpoint
注意:Endpoint有运行redis服务器的节点的IP地址:

# example.yml
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
spec:
  clusterIP: None
  ports:
  - name: redis
    port: 6379
    protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: redis
  namespace: default
subsets:
  - addresses:
      - ip: 10.156.0.58 # your node's IP address
    ports:
      - port: 6379
        name: redis
        protocol: TCP

创建上述资源后,我们可以将redis服务名解析为IP地址:

# kubectl get svc,ep redis
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/redis   ClusterIP   None         <none>        6379/TCP   28m

NAME              ENDPOINTS          AGE
endpoints/redis   10.156.0.58:6379   28m

# kubectl run dnsutils --image=gcr.io/kubernetes-e2e-test-images/dnsutils:1.3 -it --rm
/ # nslookup redis
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   redis.default.svc.cluster.local
Address: 10.156.0.58
此外,如果您的Redis服务器只监听localhost,则需要修改iptables规则。要配置从端口6379(默认redis端口)到localhost的端口转发,您可以使用: 注意:而不是10.156.0.58使用运行Redis服务器的节点的IP地址。

# iptables -t nat -A PREROUTING -p tcp -d 10.156.0.58 --dport 6379 -j DNAT --to-destination 127.0.0.1:6379

如您所见,如果redis不仅监听localhost,事情会更简单,因为我们不必修改iptables规则。

最后,让我们看看是否可以从Pod连接到主机上的redis服务器:

# kubectl exec -it redis-client -- bash
root@redis-client:/# redis-cli -h redis
redis:6379> SET key1 "value1"
OK

这篇关于Kubernetes Pod与本地主机端口对话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆