专栏首页木二天空026.掌握Service-外部访问

026.掌握Service-外部访问

一 集群外部访问

由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端默认情况,无法通过Pod的IP地址或者Service的虚拟IP地址:虚拟端口号进行访问。通常可以通过以下方式进行访问Kubernetes集群内的服务。

1.1 外部访问——映射Pod到物理机

为了让外部客户端可以访问这些服务,可以将Pod或Service的端口号映射到宿主机,以使客户端应用能够通过物理机访问容器应用。

示例1:

[root@k8smaster01 study]# vi pod-hostport.yaml

  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   name: webapp
  5   labels:
  6     app: webapp
  7 spec:
  8   containers:
  9   - name: webapp
 10     image: tomcat
 11     ports:
 12     - containerPort: 8080
 13       hostPort: 8081

[root@k8smaster01 study]# kubectl create -f pod-hostport.yaml

[root@k8smaster01 study]# kubectl get pods -l="app=webapp"

NAME READY STATUS RESTARTS AGE

webapp 1/1 Running 0 2m1

[root@k8smaster01 study]# curl 172.24.8.71:8081

示例2:

[root@k8smaster01 study]# cat pod-hostnetwork.yaml

  1 apiVersion: v1
  2 kind: Pod
  3 metadata:
  4   name: webapp2
  5   labels:
  6     app: webapp2
  7 spec:
  8   hostNetwork: true
  9   containers:
 10   - name: webapp2
 11     image: tomcat
 12     ports:
 13     - containerPort: 8080
 14       hostPort: 8080

提示:通过设置Pod级别的hostNetwork=true,该Pod中所有容器的端口号都将被直接映射到物理机上。在设置hostNetwork=true时需要注意,在容器的ports定义部分如果不指定hostPort,则默认hostPort等于containerPort,如果指定了hostPort,则hostPort必须等于containerPort的值。

[root@k8smaster01 study]# curl 172.24.8.73:8080

1.2 外部访问——映射Service到物理机

示例1:

[root@k8smaster01 study]# vi webappsvc.yaml

  1 apiVersion: v1
  2 kind: Service
  3 metadata:
  4   name: webapp
  5 spec:
  6   type: NodePort
  7   ports:
  8   - port: 8080
  9     targetPort: 8080
 10     nodePort: 8081
 11   selector:
 12     app: webapp

提示:为了k8s和其他程序不起冲突,默认端口的范围是:30000-32767,因此默认情况以上yaml可能出现如下告警,可通过如下方式修改:provided port is not in the valid range. The range of valid ports is 30000-32767 #告警

[root@k8smaster01 ~]# vi /etc/systemd/system/kube-apiserver.service #在所有master上修改

  1 ExecStart=/opt/k8s/bin/kube-apiserver \
  2 ……
  3   --service-node-port-range=1-65535 \						#添加此参数
  4 ……

[root@k8smaster01 ~]# systemctl daemon-reload

[root@k8smaster01 ~]# systemctl restart kube-apiserver.service

[root@k8smaster01 study]# kubectl create -f webappsvc.yaml

[root@k8smaster01 study]# curl 172.24.8.71:8081

通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。

示例2:如下所示status.loadBalancer.ingress.ip设置的146.148.47.155为第三方提供的负载均衡器的IP地址。对该Service的访问请求将会通过LoadBalancer转发到后端Pod上,负载分发的实现方式则依赖于第三方提供的LoadBalancer的实现机制。

[root@k8smaster01 study]# vi myoutsvc.yaml

  1 apiVersion: v1
  2 kind: Service
  3 metadata:
  4   name: my-service
  5 spec:
  6   type: LoadBalancer
  7   selector:
  8     app: MyApp
  9   ports:
 10   - protocol: TCP
 11     port: 80
 12     targetPort: 9376
 13     nodePort: 30061
 14   clusterIP: 10.0.171.239
 15 status:
 16   loadBalancer:
 17     ingress:
 18     - ip: 47.96.145.131

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 001.Kubernetes简介

    Kubernetes是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在D...

    木二
  • 047.集群管理-资源及配额管理

    对于Kubernetes资源,有两个重要参数:CPU Request与Memory Request。

    木二
  • 021.掌握Pod-Pod调度策略

    Pod重启策略(RestartPolicy)应用于Pod内的所有容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健...

    木二
  • Kubernetes 学习(1)-了解k8s及其组件

    Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Dock...

    用户4464623
  • 学界 | 腾讯 AI Lab 解读19篇 ECCV 2018 入选论文

    计算机视觉欧洲大会(European Conference on Computer Vision,简称ECCV)将于9月8日-14日在德国慕尼黑举办,该会议与C...

    AI科技评论
  • 武汉“封城”抗击新型肺炎,北大最新病毒宿主研究指向蛇,被感染专家:眼睛也需防护

    自2020年1月23日10时起,全市城市公交、地铁、轮渡、长途客运暂停运营;无特殊原因,市民不要离开武汉,机场、火车站离汉通道暂时关闭。恢复时间另行通告。

    量子位
  • 通过Service访问应用 (1)

    通过之前的操作,应用部署完成了,我们的Demo网站已经成功启动了,那么如何访问网站呢?

    心莱科技雪雁
  • 查看 ceph 的实时运行状态

    院长技术
  • CEPH检查信息状态信息

    院长技术
  • Seaweed-FS综合使用测试

    https://bintray.com/chrislusf/seaweedfs/seaweedfs#

    三杯水Plus

扫码关注云+社区

领取腾讯云代金券