对外暴露端口

Exposing ports externally

我正在部署一个 IRC 服务器,我需要将端口 6667 暴露给外部网络。应用程序 pod 本身在内部使用端口 6667。

我目前在我的主机上使用 minikube/kubectl

这是我的 YAML 配置文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: inspircd-x
spec:
  selector:
    matchLabels:
      app: inspircd
  replicas: 2
  template:
    metadata:
      labels:
        app: inspircd
    spec:
      containers:
      - name: inspircd-x
        image: inspircd/inspircd-docker
        ports:
        - containerPort: 6667

我正在创建服务:

kubectl expose deployment inspircd-x --type=LoadBalancer --name inspircd-x

并分配 IP:

minikube service inspircd-x

我知道 NodePort 范围是 30000 - 32767,所以(显然)当我尝试修改我的服务配置时它会抛出一个错误。

我想做的和这个类似docker yaml:

services:
  ircd-compose:
    image: inspircd/inspircd-docker
    ports:
      - 6667:6667
      - 7000:7000

我认为在配置方面我误解了一些概念,所以我有几个问题:

  1. expose命令和“minikube service inspircd-x”会分配一个可以从外部访问的外部IP吗? (我可以使用 Docker,将我的路由器指向我的主机)。当然,下面出现的ip不在我本地网络的IP范围内(192.168.0.x)

    NAMESPACE NAME TARGET PORT URL
    default inspircd-x 6667 http://192.168.64.2:30047
  2. 这是在外部公开我的 pod 的正确方法吗?

谢谢!

相当于您的 docker-compose 文件将使用节点上的主机端口。当您使用 minikube 时,这只是一个节点。

    spec:
      containers:
      - name: inspircd-x
        image: inspircd/inspircd-docker
        ports:
        - containerPort: 6667
          hostPort: 6667

kubernetes 服务用于集群内部的连接,它可以使用额外的服务向外部公开,通常作为基础设施的一部分提供,例如 LoadBalancer

你的下一个问题,这是否是正确的方法 - 视情况而定。由于 hostPort 仅可用于单个 pod,因此您将无法进行滚动部署。