这篇文章介绍了配置Kubernetes外网访问集群的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
查询 Service
关于 Service,读者可以查看官方文档的资料:https://kubernetes.io/zh/docs/concepts/services-networking/service/
Service 是 k8s 中为多个 pod 公开网络服务的抽象方法。在 k8s 中,每个 pod 都有自己的 ip 地址,而且 Service 可以为一组 pod 提供相同的 DNS ,使得多个 pod 之间可以相互通讯,k8s 可以在这些 pod 之间进行负载均衡。
查询 pod:
kubectl get podsNAME                    READY   STATUS    RESTARTS   AGE
nginx-585449566-d2fdc   1/1     Running   0          4h14m
nginx-585449566-krsch   1/1     Running   0          67m
nginx-585449566-l2j6h   1/1     Running   0          67m查看 Service:
kubectl get servicesNAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   29h
nginx        ClusterIP   10.101.245.225   <none>        80/TCP    4h19mkubectl exec {pod名称} {要执行的命令} 可以在 pod 中执行某个命令,这里我们可以打印某个 pod 的环境变量。
kubectl exec nginx-585449566-d2fdc -- pritenv
# 或者
# kubectl exec nginx-585449566-d2fdc env... ...
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
NGINX_VERSION=1.19.10
... ...Service 外部服务类型
k8s 中可以将一个 Service 暴露到集群外部,外界可以通过 ip 访问这个 Service。Service 有个 ServiceType ,允许我们指定如何暴露服务。
Type 有三种类型,其取值说明如下:
- ClusterIP - 通过集群内部 IP 暴露服务,也就是说只能在集群内部访问,ClusterIP 是 ServiceType 的默认值。 
- NodePort - 通过每个节点上的 IP 和静态端口( - NodePort)暴露服务。由于其是节点上的 ,所以具有通过集群外部访问这个服务。
- LoadBalancer - 使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 - NodePort服务和- ClusterIP服务上。
- ExternalName- 通过返回 - CNAME和对应值,可以将服务映射到- externalName字段的内容(例如,- foo.bar.example.com)。
配置 ServiceType
我们删除之前 Deployment 部署 nginx 时,通过 expose 创建的 Service。
kubectl delete service nginx然后重新创建 service。
kubectl expose deployment nginx --type=LoadBalancer查询 Service(kubectl get services):
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP        29h
nginx        LoadBalancer   10.97.249.37   <pending>     80:31036/TCP   30s这里我们说一下这个端口的一些说明。
Service 是针对一个 Pod 或多个 Pod 起效,它为一组 pod 暴露相同的端口。也就是说,同一个 Service 中的 pod 不能分别设置不同的 端口。而且前面我们的一个 Service 中,是为一个 nginx 创建 Deployment ,并且设置副本集,所以他们的 端口是一致的。
Service 不会直接把 pod 暴露的 端口映射到公网,Service 默认在 30000-32767 之间为我们映射端口。所以笔者服务器上,是 310361(外网) 映射了 80(内网)。
这时已经可以直接通过外网访问 Service 中的服务了。如果你不知道服务器的公网 ip,可以通过命令查询:
curl ifconfig.io然后访问 http://x.x.x.x:31036 即可。
当使用 LoadBalancer 暴露服务到集群外部网络时,我们访问的实际上是 Service,而不是具体的某个 pod,然后 Service 会将流量重定向到后端 pod 中。这个要看实际环境和云服务商的支持。
伸缩数量
kubectl scale 命令可以扩容或缩容 Deployment、ReplicaSet、Replication Controller 或 Job 中Pod数量。在上一篇文件中中我们已经使用到。这里我们继续使用这个命令来伸缩 nginx 副本的数量,然后观察外部网络访问 Service 时的结果。
现在将我们的 nginx 副本数量设置为 0。
kubectl scale deployment nginx --replicas=0再访问 公网的 31036 端口(具体端口看你查询出来的),发现无法访问了,因为 pod 数量为 0 ,Service 找不到 pod 来提供服务。
如果我们把 ReplicaSet 数量设置为 1 或以上,则又可以继续访问了。
kubectl scale deployment nginx --replicas=2阶段总结
到此为止,我们的学习已经完成一个小阶段,能够创建集群、加入新的 Node、部署 pod 以及暴露公网 ip,允许外部访问,还可以提供多副本以负载均衡。接下来我们总结一下学习到的工具、命令,后续的学习会在这些基础之上开展。
- kubeadm - kubeadm init、- kubeadm join创建集群和使节点加入集群。
- kubectl - kubectl 原理是请求 apiserver 完成某些操作,日常操作中,最常用的就是 kubectl。 - kubectl create {对象},创建 deployment、job 等对象。- kubectl apply -f应用 yaml 文件,完成某些操作。- kubectl get {对象}查询对象。- kubectl scale {对象}伸缩对象数量(ReplicaSet)。- kubectl expose创建 Service。- kubectl describe获取对象详细的信息。- kubectl exec在对象中执行命令,例如 pod。
到此这篇关于配置Kubernetes外网访问集群的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
本文标题为:配置Kubernetes外网访问集群
 
				
         
 
            
        - 利用Docker 运行 python 简单程序 2022-10-16
- 【转载】CentOS安装Tomcat 2023-09-24
- CentOS7安装GlusterFS集群的全过程 2022-10-10
- KVM虚拟化Linux Bridge环境部署的方法步骤 2023-07-11
- nginx中封禁ip和允许内网ip访问的实现示例 2022-09-23
- 教你在docker 中搭建 PHP8 + Apache 环境的过程 2022-10-06
- IIS搭建ftp服务器的详细教程 2022-11-15
- CentOS_mini下安装docker 之 安装docker CE 2023-09-23
- 解决:apache24 安装后闪退和配置端口映射和连接超时设置 2023-09-11
- 阿里云ECS排查CPU数据分析 2022-10-06
 
						 
						 
						 
						 
						 
				 
				 
				 
				