我在服务器上运行了多个Kubernetes pod。其中一个pod包含一个数据库应用程序,它只接受来自特定子网(即其他Kubernetes pod)的连接。
我正在尝试从服务器本身连接到数据库应用程序,但连接被拒绝,因为服务器的IP不是允许子网的一部分。
有没有办法创建一个简单的pod,它接受来自服务器的连接并将它们转发到包含数据库应用程序的pod?
不幸的是,无法重新配置数据库应用以接受其他连接。
谢谢
答案 0 :(得分:3)
最简单的解决方案可能是将另一个容器添加到运行socat或类似内容的pod中,并使其侦听并连接到本地pod的IP(重要的是:如果配置了数据库程序,则连接到pod ip,而不是127.0.0.1)仅接受来自覆盖网络的连接)。 然后修改您对这些pod的服务并添加额外的端口。
以下示例假定端口2000正在运行您的程序,而2001将是在该容器内转发到2000的端口。
示例(示例正在运行模拟数据库程序的netcat):
apiVersion: v1
kind: Pod
metadata:
name: database
labels:
app: database
spec:
containers:
- name: alpine
image: alpine
command: ["nc","-v","-n","-l","-p","2000"]
ports:
- containerPort: 2000
- name: socat
image: toughiq/socat
ports:
- containerPort: 2001
env:
- name: LISTEN_PROTO
value: "TCP4"
- name: LISTEN_PORT
value: "2001"
- name: TARGET_PROTO
value: "TCP4"
- name: TARGET_HOST
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: TARGET_PORT
value: "2000"
---
apiVersion: v1
kind: Service
metadata:
name: database
spec:
selector:
app: database
ports:
- name: myport
port: 2000
targetPort: 2000
protocol: TCP
- name: socat
port: 2001
targetPort: 2001
protocol: TCP
externalIPs: [xxxxxx]