如何在K8S服务Yaml中启用端口转发

时间:2020-02-13 10:53:49

标签: kubernetes kubectl

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

只能从本地主机访问,而不能访问主IP。 当单独应用'kubectl port-forward --address 0.0.0.0 POD LISTEN_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 个答案:

答案 0 :(得分:3)

Kubernetes ServiceTypes允许您指定所需的服务类型。 默认值为ClusterIP

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

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

您应该按照以下方式更新服务yaml,以创建一个NodePort以便通过NodePort访问

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

答案 1 :(得分:0)

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

类型:NodePort

然后您就可以使用stack-overflow link

来访问服务

答案 2 :(得分:0)

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

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

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

要创建基本入口,

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