我正在尝试使用docker hub存储库上托管的映像将IBM MQ部署到我的本地MAC机器 . 我正在使用Docker边缘版本和Kubernetes支持 .
我能够使用kubernetes成功部署映像,并使队列管理器在容器内运行良好 . 我也可以ssh到容器中并确保所有MQ进程按预期运行 .
但是当我使用以下kubectl命令使用端口转发时,它会打开端口,但不允许我使用“IP或主机名”(即使是从本地计算机)telnet到它 . 但是当我使用“localhost”来telnet它工作正常 .
在进行故障排除时,我使用docker命令而不是kubernetes部署了相同的映像,并且使用docker部署,端口转发按预期工作 . 它允许我使用IP,主机名和localhost进行telnet .
所以,肯定是Kubernetes端口转发的一些问题 . 有人可以告诉我,如果我在这里遗漏了什么吗?如果我需要一些额外的信息,请告诉我 .
我是kubernetes和docker的新手,但对IBM MQ非常熟悉 .
Commands being used:
To create port forwarding rule using kubectl, checking netstat and connecting with telnet:
HOSTNAME:Test2 an0s5v4$ sudo kubectl port-forward private-reg 1414:1414 &
[1] 3001
HOSTNAME:Test2 an0s5v4$ Forwarding from 127.0.0.1:1414 -> 1414
Forwarding from [::1]:1414 -> 1414
HOSTNAME:Test2 an0s5v4$ netstat -an |grep 1414
tcp6 0 0 ::1.1414 *.* LISTEN
tcp4 0 0 127.0.0.1.1414 *.* LISTEN
HOSTNAME:Test2 an0s5v4$ ps -ef|grep 1414
0 3001 920 0 10:27AM ttys006 0:00.03 sudo kubectl port-forward private-reg 1414:1414
0 3002 3001 0 10:27AM ttys006 0:00.18 kubectl port-forward private-reg 1414:1414
502 3007 920 0 10:28AM ttys006 0:00.00 grep 1414
HOSTNAME:Test2 an0s5v4$ telnet IP 1414
Trying IP...
telnet: Unable to connect to remote host: Connection refused
HOSTNAME:Test2 an0s5v4$ telnet localhost 1414
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Handling connection for 1414
L-RCC9048942:Test2 an0s5v4$ telnet HOSTNAME 1414
Trying IP ...
telnet: Unable to connect to remote host: Connection refused
HOSTNAME:Test2 an0s5v4$ nslookup HOSTNAME
;; Truncated, retrying in TCP mode.
Name: HOSTNAME
Address: IP
Kubernetes pod YAML file contents
apiVersion: v1
kind: Pod
metadata:
name: private-reg
labels:
app: ibmmq
spec:
containers:
-
env:
-
name: LICENSE
value: accept
-
name: MQ_QMGR_NAME
value: QM4
image: "image path in docker hub"
name: private-reg-container
ports:
-
containerPort: 1414
hostPort: 1414
EDIT: ADDED K8S Service to the post
Kubernetes service YAML file contents
apiVersion: v1
kind: Service
metadata:
name: myservice-nodeport
labels:
app: ibmmq
spec:
ports:
- port: 3000
targetPort: 1414
nodePort: 31414
selector:
app: ibmmq
type: NodePort
1 回答
这是kubectl port-forward命令的已知问题 . 它只连接到localhost接口 . 看到这个PR:https://github.com/kubernetes/kubernetes/pull/46517 . 我仍然在研究同样的问题 . 我看到两个解决方法:
socat 选项:(需要安装
brew install socat
)https://github.com/kubernetes/kubernetes/issues/43962#issuecomment-418305960,我真的不喜欢,因为我需要另一个端口来监听而不是转发pf 解决方案:https://superuser.com/questions/473039/pfctl-port-forwarding-in-mac-osx#521803,我仍然无法工作 .
我添加了
/etc/pf.conf
文件规则,如:rdr pass on en0 inet proto tcp from any to any port 10001 -> 127.0.0.1 port 10001
,其中en0
是我的wifi界面:我有一个带kubectl端口转发的终端:
kubectl port-forward mypod 10001:10001
,但*:10001
端口没有监听器(你可以查看命令:sudo lsof -PiTCP -sTCP:LISTEN
)如果我修复它,我会编辑这个答案 .