说说 Kubernetes 是怎么实现服务发现的( 五 )
为了让外界可以访问到这个 Nginx , 我们还得给它创建一个 Service 来把 Nginx 暴露出去:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
这里面的内容描述了一个 NodePort 类型的 Service:
apiVersion: v1 kind: Service metadata: name: ingress-nginx namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx spec: type: NodePort ports: - name: httpport: 80targetPort: 80protocol: TCP - name: httpsport: 443targetPort: 443protocol: TCP selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx
可以看到这个 Service 仅仅是把 Nginx Pod 的 80/443 端口暴露出去 , 完了你就可以通过宿主机 IP 和 NodePort 端口访问到 Nginx 了 。
接下来我们来看 Ingress 对象一般是如何编写的 , 我们可以参考一个例子 。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: cafe-ingress spec: tls: - hosts: - cafe.example.com secretName: cafe-secret rules: - host: cafe.example.com http:paths:- path: /teabackend:serviceName: tea-svcservicePort: 80- path: /coffeebackend:serviceName: coffee-svcservicePort: 80
这个 Ingress 表明我们整体的域名是 cafe.example.com , 希望通过 cafe.example.com/tea 访问 tea-svc 这个 Service , 通过 cafe.example.com/coffee 访问 coffee-svc 这个 Service 。这里我们通过关键字段 spec.rules 来编写转发规则 。
我们可以查看到 Ingress 对象的详细信息:
$ kubectl get ingress NAMEHOSTSADDRESSPORTSAGE cafe-ingresscafe.example.com80, 4432h$ kubectl describe ingress cafe-ingress Name:cafe-ingress Namespace:default Address: Default backend:default-http-backend:80 () TLS: cafe-secret terminates cafe.example.com Rules: HostPathBackends ---------------- cafe.example.com/teatea-svc:80 ()/coffeecoffee-svc:80 () Annotations: Events: TypeReasonAgeFromMessage ------------------------- NormalCREATE4mnginx-ingress-controllerIngress default/cafe-ingress
我们之前讲了我们通过 NodePort 的方式将 nginx-ingress 暴露出去了 , 而这时候我们 Ingress 配置又希望通过 cafe.example.com 来访问到后端 Pod , 那么首先 cafe.example.com 这个域名得指到任意一台宿主机 Ip:nodePort上 , 请求到达 nginx-ingress 之后再转发到各个后端 Service 上 。当然 , 暴露 nginx-ingress 的方式有很多种 , 除了 NodePort 外还包括 LoadBalancer、hostNetwork 方式等等 。
我们最后来试一下请求:
$ curl cafe.example.com/coffee Server name: coffee-7dbb5795f6-vglbv $ curl cafe.example.com/tea Server name: tea-7d57856c44-lwbnp
可以看到 Nginx Ingress controller 已经为我们成功将请求转发到了对应的后端 Service 。而当请求没有匹配到任何一条 ingress rule 的时候 , 理所当然我们会得到一个 404 。
至此 , Kubernetes 的容器网络是怎么实现服务发现的已经讲完了 , 而服务发现正是微服务架构中最核心的问题 , 解决了这个问题 , 那么使用 Kubernetes 来实现微服务架构也就实现了一大半 。
来源:TechWeb
- 原神心海是几星(原神心海角色属性介绍)
- 今年的iphonese,还是你熟悉的模样
- 原神雷神是什么定位(原神手游雷神定位分析)
- 原神无尽骤战高分打法是什么(原神无尽骤战玩法技巧分享)
- 崩坏3V5.0版本累计消费活动是什么(崩坏3V5.0版本夏日活动介绍)
- 249克!开箱道通EVO Nano+袖珍无人机:夜景是亮点
- 浓缩洗涤剂,还是老牌国货一轻日化好~
- 饿了么是不是只能用支付宝(饿了么平台运营详细解说)
- 微信朋友验证消息是怎么回事(?微信查看好友添加来源步骤)
- 妄想山海神树蕴养玩法是什么(妄想山海神树蕴养玩法思路介绍)
