Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解kubernetes端口转发、端口和目标端口_Kubernetes_Portforwarding - Fatal编程技术网

了解kubernetes端口转发、端口和目标端口

了解kubernetes端口转发、端口和目标端口,kubernetes,portforwarding,Kubernetes,Portforwarding,因此,我的理解是,port是服务提供请求的端口,targetPort是容器服务器中的应用程序请求的端口 targetPort甚至不需要指定,它通常与containerPort相同(我是从StackOverflow答案中得到的,并通过删除targetPort对其进行验证) Kubernetes端口转发将在本地端口接收到的请求转发到远程端口(服务运行的位置) 在我的应用程序中,规范是使用helm创建的。我的端口设置为80,我的容器端口设置为5000(这是一个非常简单的烧瓶应用程序) 按照该链接中提到

因此,我的理解是,
port
是服务提供请求的端口,
targetPort
是容器服务器中的应用程序请求的端口

targetPort
甚至不需要指定,它通常与
containerPort
相同(我是从
StackOverflow
答案中得到的,并通过删除
targetPort
对其进行验证)

Kubernetes端口转发将在本地端口接收到的请求转发到远程端口(服务运行的位置)

在我的应用程序中,规范是使用
helm
创建的。我的
端口
设置为
80
,我的
容器端口
设置为
5000
(这是一个非常简单的烧瓶应用程序)

按照该链接中提到的示例,以下内容应起作用:

kubectl --namespace default port-forward $POD_NAME 7000:80
但这一条起作用了:

kubectl --namespace default port-forward $POD_NAME 7000:5000
有什么我没听懂的吗?以下是我的pod的
kubectl描述:

Name:           mock-python-server-9f5b557f5-klxq8
Namespace:      default
Priority:       0
Node:           docker-desktop/192.168.65.3
Start Time:     Thu, 21 Jan 2021 13:59:40 -0800
Labels:         app.kubernetes.io/instance=mock-python-server
                app.kubernetes.io/name=mock-python-server
                pod-template-hash=9f5b557f5
Annotations:    <none>
Status:         Running
IP:             10.1.2.39
Controlled By:  ReplicaSet/mock-python-server-9f5b557f5
Containers:
  master:
    Container ID:   docker://7e258d94c458f47c1add418c7969e77fbaa532c56df7405681e778d5f0e63d01
    Image:          <image>
    Image ID:       <image_id>
    Port:           5000/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 21 Jan 2021 13:59:43 -0800
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     100m
      memory:  128Mi
    Requests:
      cpu:      100m
      memory:   128Mi
    Liveness:   http-get http://:http/health delay=0s timeout=1s period=10s #success=1 #failure=3
    Readiness:  http-get http://:http/health delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:
      env:  LOCAL
...
和我的
服务.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "master.fullname" . }}
  labels:
    {{- include "master.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "master.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "master.selectorLabels" . | nindent 8 }}
    spec:
    {{- with .Values.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
    {{- end }}

      serviceAccountName: {{ include "master.serviceAccountName" . }}
      securityContext:
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
      containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.securityContext | nindent 12 }}
          image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          env:
            - name: env
              value: {{ .Values.environment }}
          ports:
            - name: http
              containerPort: 5000 #{{ .Values.flaskPort }}
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /health
              port: http
          readinessProbe:
            httpGet:
              path: /health
              port: http
          resources:
            {{- toYaml .Values.resources | nindent 12 }}
      {{- with .Values.nodeSelector }}
      nodeSelector:
        {{- toYaml . | nindent 8 }}
      {{- end }}
    {{- with .Values.affinity }}
      affinity:
        {{- toYaml . | nindent 8 }}
    {{- end }}
    {{- with .Values.tolerations }}
      tolerations:
        {{- toYaml . | nindent 8 }}
    {{- end }}

apiVersion: v1
kind: Service
metadata:
  name: {{ include "master.fullname" . }}
  labels:
    {{- include "master.labels" . | nindent 4 }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: 80 #{{ .Values.service.port }}
      targetPort: 5000
      protocol: TCP
      name: http
  selector:
    {{- include "master.selectorLabels" . | nindent 4 }}

我哪里出错了?

您的kubernetes(k8s)应用程序正在侦听其容器端口:5000,因此要从您的计算机访问,您需要:

 kubectl --namespace default port-forward $POD_NAME 7000:5000
这将允许您将k8s外部连接到端口7000上的应用程序


您的应用程序侦听端口设置为5000,而不是80…

当使用端口转发时,它会通过隧道连接到集群内的指定资源,因此命令
kubectl——名称空间默认端口转发$POD\u NAME 7000:80
,表示您要从本地主机端口7000连接到名为
$POD_NAME
的资源,并连接到端口80上的资源

根据您的描述,您实际上不想连接到pod,而是要连接到服务(当集群内的端口80发出请求时,该服务指向端口5000上您想要的pod)。因此,您需要在命令中指定服务名称,如下所示:

kubectl port-forward svc/{{your service name}} 7000:80

我刚刚添加了规格-可以检查一下吗?我确实有。我刚刚在问题中发布了我的完整规范哦,那么你想转发到一个服务,对吗?试试这个
kubectl-port-forward-svc/{{your-service-name}}7000:80
…这很有效!!那么,当我没有提到
service/my service
时,在前面的命令中会发生什么?为什么它只能成功地从本地端口上的
7000
转发到集装箱上的
5000