首页 文章

如何在裸机安装上从外部访问kubernetes服务

提问于
浏览
4

尝试制作裸机k8s集群以提供一些服务,并且需要能够在tcp端口80和udp端口69上提供它们(可从k8s集群外部访问 . )我已经使用kubeadm设置了集群,并且它正在运行ubuntu 16.04 . 如何从外部访问服务?我一直在尝试使用负载均衡器和入口,但由于我没有使用外部负载均衡器(本地而非AWS等),因此没有运气 .

我正在尝试做的一个例子可以找到here但它正在使用GCE .

谢谢

3 回答

  • 0

    使用NodePort进行服务

    创建类型为NodePort的服务,Service可以在每个节点上侦听TCP / UDP端口30000-32767 . 默认情况下,您不能简单地选择在节点上的端口80上公开服务 .

    kind: Service
    apiVersion: v1
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
      - protocol: TCP
        port: {SERVICE_PORT}
        targetPort: {POD_PORT}
        nodePort: 31000
      - portocol: UDP
        port: {SERVICE_PORT}
        targetPort: {POD_PORT}
        nodePort: 32000
      type: NodePort
    

    容器映像gcr.io/google_containers/proxy-to-service:v2是一个非常小的容器,可以为您进行端口转发 . 您可以使用它将pod端口或主机端口转发到服务 . Pod可以选择任何端口或主机端口,并且不受服务的限制 .

    apiVersion: v1
    kind: Pod
    metadata:
      name: dns-proxy
    spec:
      containers:
      - name: proxy-udp
        image: gcr.io/google_containers/proxy-to-service:v2
        args: [ "udp", "53", "kube-dns.default", "1" ]
        ports:
        - name: udp
          protocol: UDP
          containerPort: 53
          hostPort: 53
      - name: proxy-tcp
        image: gcr.io/google_containers/proxy-to-service:v2
        args: [ "tcp", "53", "kube-dns.default" ]
        ports:
        - name: tcp
          protocol: TCP
          containerPort: 53
          hostPort: 53
    

    Ingress

    如果有多个服务共享具有不同主机/路径的相同TCP端口,请部署NGINX Ingress Controller,它将侦听HTTP 80和HTTPS 443 .

    创建入口,将流量转发到指定的服务 .

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: test-ingress
      annotations:
        ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - http:
          paths:
          - path: /testpath
            backend:
              serviceName: test
              servicePort: 80
    
  • 0

    如果我打算在我的家庭网络上这样做,我会这样做:
    在我的路由器上配置2端口转发规则,将流量重定向到充当L4负载均衡器的nginx框 .

    所以如果我的路由器IP是1.2.3.4而我的自定义L4 nginx LB是192.168.1.200
    然后我告诉我的路由器向前移动:
    1.2.3.4:80 - > 192.168.1.200:80
    1.2.3.4:443 - > 192.168.1.200:443

    我跟着这个https://kubernetes.github.io/ingress-nginx/deploy/
    并且部署's in the generic cloud ingress controller (That should create an ingress controller pod, an L7 Nginx LB deployment and service in the cluster, and expose it on nodeports so you'具有NodePort 32080和32443的大部分内容(注意它们实际上是随机的,但这更容易遵循))
    (因为你're working on bare metal I don' t相信它能够为你自动生成并配置L4负载均衡器 . )

    然后,我将手动配置L4负载均衡器以对正在进行的流量进行负载均衡
    端口80 ---> NodePort 32080
    端口443 ---> NodePort 32443
    因此,在做什么的大图和以下链接之间你应该是好的 .
    https://kubernetes.github.io/ingress-nginx/deploy/baremetal/

    (顺便说一下,这将让您继续使用入口控制器配置入口)

    注意:我打算在几个月内在家里的衣柜里安装一个裸机群,所以让我知道它是怎么回事!

  • 1

    如果您只有一个节点将入口控制器部署为具有主机端口80的守护进程 . 请勿为其部署服务

    如果你有多个节点;对于 Cloud 提供商,负载均衡器是集群外部的构造,它基本上是在某些端口上运行服务的pod的每个节点的HA代理 . 您可以手动执行此类操作,对于要将集合类型暴露给NodePort的任何服务,允许范围内的某个端口(30k中的某个位置),并将具有TCP balancer 器的另一个VM(例如nginx)旋转到所有节点在那个港口 . 您将只能运行与该服务的节点一样多的pod

相关问题