kubernetes 当我更改端口号时,kubectl port-forward失败

5cnsuln7  于 12个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(183)

我在看一本书,他们有一个应用程序的配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  labels:
    app: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: cloudnatived/demo:hello
          ports:
          - containerPort: 8888

---
apiVersion: v1
kind: Service
metadata:
  name: demo
  labels:
    app: demo
spec:
  # NOTE: depending on which version of the book you have, this may say port 9999. The latest version of the book uses 8888 to match the pod.
  ports:
  - port: 8888
    protocol: TCP
    targetPort: 8888
  selector:
    app: demo
  type: ClusterIP

字符串
这工作正常。

kubectl port-forward service/demo 9999:8888
>>> Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888
Handling connection for 9999
curl localhost:9999/info 
>>> Hello, 世界

的数据
但是如果我改变集装箱港口,它就不起作用了。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  labels:
    app: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: cloudnatived/demo:hello
          ports:
          - containerPort: 9278

---
apiVersion: v1
kind: Service
metadata:
  name: demo
  labels:
    app: demo
spec:
  # NOTE: depending on which version of the book you have, this may say port 9999. The latest version of the book uses 8888 to match the pod.
  ports:
  - port: 4269
    protocol: TCP
    targetPort: 9278
  selector:
    app: demo
  type: ClusterIP

x

kubectl port-forward service/demo 9999:4269
>>> Forwarding from 127.0.0.1:9999 -> 9278
Forwarding from [::1]:9999 -> 9278
Handling connection for 9999
E1117 15:59:19.151771   38005 portforward.go:409] an error occurred forwarding 9999 -> 9278: error forwarding port 9278 to pod 0c928b279bf1932972fc6724a22d8dac57ebb89696569269868959a342072b24, uid : container not running (0c928b279bf1932972fc6724a22d8dac57ebb89696569269868959a342072b24)
error: lost connection to pod
curl localhost:9999/info
>>> curl: (52) Empty reply from server

的一个字符串
我不知道为什么会失败。据我所知,当你执行kubectl port-forward service/demo 9999:4269时,它会通过服务上的端口4269将我的本地端口9999转发到pod 9278中的端口。
我已经试过很多次了,结果都是一样的。当我把所有东西都切换回8888的那一刻,一切都很好。

plicqrtu

plicqrtu1#

在YAML规范中,

image: cloudnatived/demo:hello
ports:
   - containerPort: 8888

字符串
表示使用coludnatived/demo:hello并将8888端口公开为部署。请参阅https://kubernetes.io/docs/tutorials/services/connect-applications-service/#exposing-pods-to-the-cluster
请注意,容器没有使用节点上的端口80,也没有任何特殊的NAT规则将流量路由到Pod。这意味着您可以在同一个节点上运行多个nginx Pod,所有这些Pod都使用同一个containerPort,并使用为Pod分配的IP地址从集群中的任何其他Pod或节点访问它们。
在您的示例中,您使用副本和三个容器,暴露9278端口负载均衡器(在您的情况下服务)可以触及它。这并不意味着您的应用程序映像侦听9278。
但讽刺的是,在文档(https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#container-v1-core)中,
连接埠:要从容器中公开的端口列表。此处未指定端口并不阻止公开该端口。可以0.0.0.0从网络访问容器内侦听默认“www.example.com“地址的任何端口。使用战略合并修补程序修改此阵列可能会损坏数据。有关详细信息,请参阅https://github.com/kubernetes/kubernetes/issues/108255。无法更新。
我怎么能澄清这一点,我想展示一些例子与下面的9278选项。运行这个CLI。

kubectl get pods

--- pods showed ---
 
kubectl port-forward [anypod] 9999:8888


即使你的部署容器端口设置为9278,但pod也可以用8888访问和访问。

相关问题