本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!
作者:一凡|慕课网讲师
集群内访问
在k8s中创建的微服务,大部分都是在集群内部互相调用,这时候,使用DNS就可以很方面访问。
比如:服务名是 my-service,端口号是8080,命名空间是yifan,那么就可以通过域名+端口 “my-service.yifan.svc.cluster.local:8080” 在集群内访问。
当然,也可以直接用服务的ClusterIP+服务的端口号,只是这么使用的较少。
DNS解析到的IP也就是这个服务的ClusterIP,只是咱们不需要记住ClusterIP,记住服务名对应的域名更加容易。
如上图所示,就是k8s集群内的服务访问流程。
客户端通过DNS服务的域名解析 my-service.yifan.svc.cluster.local 返回这个服务的ClusterIP。
然后创建TCP连接到这个ClusterIP+端口号上。
网络请求经过Iptables/ipvs规则处理,经过负载均衡策略,把这个ClusterIP重定向到服务的后端实例,也就是这个服务的某一个Pod得PodIP。
这样TCP连接成功创建,客户端也就建立了与服务的后端实例的连接,也就可以进行后续的请求了。
下面是Cluster类型的service的yaml文件示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- name: http
port: 80
targetPort: 8080
这个YAML文件包含以下内容:
-
apiVersion
: 指定Kubernetes API的版本。 -
kind
: 指定要创建的对象类型,此处为Service。 -
metadata.name
: 指定Service的名称,此处为“my-service”。 -
spec.type
: 指定Service的类型,此处为“ClusterIP”。 -
spec.selector
: 指定要为Service选择的Pod或副本集的标签选择器。在这个例子中,标签选择器是“app=my-app”。 -
spec.ports
: 指定要公开的端口及其配置信息。在这个例子中,将公开端口80,名称为“http”,将流量转发到Pod中的端口8080。
要使用此YAML文件创建Service,请使用以下命令:
kubectl apply -f service.yaml
这是集群内访问的流程,接下来,再来看看本文的核心内容,外网如何访问。
集群外访问
k8s集群的外网访问方式有3种:
Ingress, NodePort和LoadBanlancer。文章来源:https://www.toymoban.com/news/detail-499777.html
其中Ingress是k8s的一个抽象层,有很多的IngressController和服务可以来实现这个Ingress服务,然后由这个Ingress服务把外网的请求转发到集群内的服文章来源地址https://www.toymoban.com/news/detail-499777.html
到了这里,关于一文读懂k8s的外网访问方式,Ingress/NodePort/LoadBanlancer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!