首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在裸机安装上从外部访问kubernetes服务

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

Stack Overflow用户
提问于 2017-11-01 22:27:19
回答 3查看 2.9K关注 0票数 4

尝试创建裸机k8s集群以提供某些服务,并且需要能够在tcp端口80和udp端口69上提供这些服务(可从k8s集群外部访问)。我已经使用kubeadm设置了集群,它正在运行ubuntu 16.04。我一直在尝试使用负载均衡器和入口,但没有成功,因为我没有使用外部负载均衡器(本地负载均衡器而不是AWS负载均衡器等)。

我正在尝试做的一个例子是发现here,但它使用的是GCE。

谢谢

EN

回答 3

Stack Overflow用户

发布于 2017-11-02 06:48:42

使用NodePort的服务

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

代码语言:javascript
复制
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可以选择任何端口或主机端口,并且不受与服务相同的限制。

代码语言:javascript
复制
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

入口

如果有多个服务共享不同主机/路径的同一TCP端口,则部署NGINX Ingress Controller,它监听HTTP80和HTTPS443。

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2018-09-15 08:47:45

如果我要在我的家庭网络上这样做,我会这样做:

在我的路由器上配置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/

并部署通用云入口控制器中的大部分内容(这应该在集群中创建入口控制器pod、L7 Nginx LB部署和服务,并在节点端口上公开它,以便您拥有NodePort 32080和32443 (请注意,它们实际上是随机的,但更容易遵循))

(因为您使用的是裸机,所以我不相信它能够自动为您生成和配置L4负载均衡器。)

然后,我手动配置L4负载均衡器,以对传入的流量进行负载均衡

端口80 -> NodePort 32080

端口443 -> NodePort 32443

因此,在所做工作的总体情况和下面的链接之间,你应该是好的。

https://kubernetes.github.io/ingress-nginx/deploy/baremetal/

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

注意:我计划在几个月后在家里的衣柜里设置一个裸机集群,所以请让我知道它的进展!

票数 0
EN

Stack Overflow用户

发布于 2018-09-15 09:14:50

如果只有一个节点,则将入口控制器部署为主机端口为80的守护进程。不要为其部署服务

如果您有多个节点;对于云提供商,负载均衡器是集群外部的一个构造,它基本上是每个节点的HA代理,每个节点在某些端口上运行您的服务的pod。你可以手动做这类事情,对于任何你想用允许范围内的某个端口(在30k内的某个地方)向NodePort公开设置类型的服务,并启动另一个带有TCP均衡器的虚拟机(比如nginx)到该端口上的所有节点。您将被限制运行与该服务的节点数量一样多的pod

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47057176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档