提问者:小点点

如何在k8s服务yaml中启用端口转发


我正在尝试自动化pod部署,但似乎无法弄清楚如何从yaml配置将流量从集群外部转发到pod。

只能从localhost访问,但访问主IP时无法访问。单独应用kubectl port-正转--address0.0.0.0PODLISTEN_PORT:DEST_PORT时,它有效。

apiVersion: v1
kind: Service
type:
metadata:
  labels:
    name: app1
  name: app1
spec:
  ports:
  - name: "80"
    port: 8888
    targetPort: 80
  selector:
    name: app1
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: app1
  name: app1
spec:
  containers:
  - image: nginx
    name: app1
    ports:
    - containerPort: 80
    resources:
      limits:
        cpu: 500m
        memory: "52428800"
      requests:
        cpu: 250m
        memory: "20971520"
  nodeSelector:
    slave: "one"
  restartPolicy: Never

共3个答案

匿名用户

库伯内特斯ServiceTypes允许您指定您想要的服务类型。默认值为ClusterIP。

ClusterIP:在集群内部IP上公开服务。选择此值将使服务只能从集群内部访问。这是默认的ServiceType。

NodePort:在静态端口(NodePort)上公开每个节点的IP上的服务。NodePort服务路由到的集群IP服务是自动创建的。您将能够通过请求从集群外部联系NodePort服务

您应该如下更新服务yaml以创建NodePort以供NodePort访问

apiVersion: v1
kind: Service
metadata:
  labels:
    name: app1
  name: app1
spec:
  ports:
  - name: "80"
    port: 8888
    targetPort: 80
  selector:
    name: app1
  type: NodePort

匿名用户

入口:公开从集群外部到集群内服务的HTTP和HTTPS路由。流量路由由在入口资源上定义的规则控制。

    internet
        |
   [ Ingress ]
   --|-----|--
   [ Services ]

入口不是一种服务,而是一个对象,它充当反向代理和集群的单个入口点,将请求路由到不同的服务。

为了创建基本入口,

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: testsvc
    servicePort: 80

匿名用户

您需要将服务类型更新为NodePort。

类型:NodePort

然后,您将能够使用超文本传输协议访问服务://NODE_HOST:NODE_PORT