前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从集群外访问Kubernetes Pod

从集群外访问Kubernetes Pod

作者头像
SY小站
发布2020-06-15 11:55:39
2.1K0
发布2020-06-15 11:55:39
举报
文章被收录于专栏:SY小站的专栏SY小站的专栏

1. 介绍

‍有几种方法可以将Kubernetes集群上运行的应用程序暴露给外界,这样就不用只能在k8s集群内通过ip+端口访问了。

2. hostNetwork:true

当Pod配置为时hostNetwork: true,在此Pod中运行的应用程序可以直接看到启动Pod的主机的网络接口。配置为在所有网络接口上侦听的应用程序将依次在主机的所有网络接口上访问。这是使用主机网络的Pod的示例定义:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  hostNetwork: true
  containers:
    - name: nginx
      image: nginx

hostNetwork的优点是直接使用宿主机的网络,只要宿主机能访问,Pod就可以访问;

缺点:

  • 易用性:Pod漂移到其他node上,访问时需要更换ip地址。当然可以将Pod绑定在某几个node上,并在这几个node上运行keepalived以漂移vip,这样就可以用vip来访问。
  • 易用性:Pod间可能出现端口冲突,造成Pod无法调度成功。
  • 安全性:Pod可以直接观察到宿主机的网络。

3. hostport

容器端口将通过<hostIP>:<hostPort>暴露给外部网络,其中hostIP是容器运行所在的Kubernetes节点的IP地址,而hostPort是用户请求的端口。这是一个示例pod定义:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
          hostPort: 80

hostport和hostnetwork类似,不过它是经过了一系列的iptables规则所做的fullnat,并且性能来说是不如hostnetwork的,多了iptables的转发。

4. nodeport

默认情况下,可以在ClusterIP上访问Kubernetes服务,这是一个内部IP地址,只能从Kubernetes集群内部访问它。ClusterIP使Pod中运行的应用程序可以访问服务。为了使服务可以从群集外部访问,用户可以创建NodePort类型的服务。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: nginx
spec:
  type: NodePort
  ports:
    - name: nginx
      port: 80
      nodePort: 30003
  selector:
    name: nginx

创建服务后,将在Kubernetes群集的每个节点上运行并在所有网络接口上侦听的kube-proxy组件接受端口30003上的连接。kube-proxy将传入的流量转发到选定的Pod。

5. loadbanlance

为了能够创建LoadBalancer类型的服务,必须在Kubernetes集群的配置中启用云提供商。从1.6版开始,Kubernetes可以在AWS,Azure,CloudStack,GCE和OpenStack上配置负载均衡器。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: nginx
spec:
  type: LoadBalancer
  ports:
    - name: nginx
      port: 80
  selector:
    name: nginx

当然了,云上的slb是有费用的,尤其是大规格的。

6. ingress

Kubernetes Ingress提供了负载均衡器的典型功能:HTTP路由,sticky sessions, SSL termination, SSL passthrough,TCP和UDP负载均衡……目前,并不是每个Ingress控制器都实现所有可用功能。您必须查阅Ingress控制器的文档以了解其功能。详细情况请参考ingress高可用

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
spec:
  rules:
    - host: nginx.sy.com
      http:
        paths:
          - backend:
              serviceName: nginx
              servicePort: 80

7. pod的ip全局可达

当kubernetes的网络方案选择calico或者contiv时,还可以配置Pod IP全局可达,从而直接在集群外访问。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SY技术小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. hostNetwork:true
  • 3. hostport
  • 4. nodeport
  • 5. loadbanlance
  • 6. ingress
  • 7. pod的ip全局可达
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档