Kubernetes 系列(四):使用Traefik访问.net core api

1、 准备nginx

本篇的要求是在前三篇的基础上已经搭建好的本地k8s以及部署了Traefik,咱们将会使用Traefik Ingress来访问.net core api,比较简单,作个记录,若是尚未搭建k8s或者尚未部署Traefik的同窗能够先去看下Kubernetes 系列的前三篇。api

 

2、k8s部署.net core api浏览器

首先咱们要新建一个.net core api,默认配置便可,而后打包镜像上传到仓库,这一步就省略了,以前专门写过一篇,你们能够看下哈。app

准备.net core api部署到k8s的部署文件 k8s-api.yaml:负载均衡

kind: Deployment apiVersion: apps/v1 metadata: labels: k8s-app: k8s-api name: k8s-api namespace: netcore spec: replicas: 2 selector: matchLabels: k8s-app: k8s-api template: metadata: labels: k8s-app: k8s-api spec: containers: - name: k8s-api image: ****** --这里是你的.net core api镜像名称 ports: - containerPort: 80

运行如下命令部署.net core api:less

kubectl apply -f k8s-api.yaml

经过如下命令查看Pod状态:curl

[root@localhost k8s-netcore]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deploy-779fcd779f-6nzd5   1/1     Running   2 12d nginx-deploy-779fcd779f-8nkdp   1/1     Running   2          12d

而后咱们为其运行一个Service,准备部署Service的文件k8s-api-service.yaml:oop

apiVersion: v1 kind: Service metadata: name: k8s-api namespace: netcore spec: selector: k8s-app: k8s-api ports: - name: http port: 80 targetPort: 80

运行该Service部署文件:url

kubectl apply -f k8s-api-service.yaml

经过如下命令查看Service状态:spa

[root@localhost k8s-netcore]# kubectl get svc -n netcore NAME TYPE CLUSTER-IP      EXTERNAL-IP PORT(S) AGE k8s-api    ClusterIP   10.96.173.2     <none>        80/TCP 12s k8s-demo   NodePort    10.109.237.67   <none>        80:30335/TCP   3d17h

能够看到k8s-api已经成功运行了,它的Cluster-ip是10.96.173.2,这个时候咱们已经能够在集群内部访问服务了:

[root@localhost k8s-netcore]# curl http://10.96.173.2/api/values
["value1","value2"]

由于我用的是虚拟机,因此我须要映射下Service和虚拟机的IP,直接使用物理机安装的同窗能够跳过这一步(个人状况如今是虚拟机和物理机默认是ping通的,可是Service以及Pod与物理机是不通的):

首先查看VMnet8网卡的编号:

C:\Users\Administrator>route print =========================================================================== 接口列表 13...00 ff 7a e5 a0 e9 ......TAP-Windows Adapter V9 #2
  9...54 ab 3a 47 1c e8 ......Realtek PCIe GBE Family Controller 27...4a 15 73 1e 60 f7 ......Hyper-V Virtual Ethernet Adapter 5...00 15 5d 01 6d 83 ......Hyper-V Virtual Ethernet Adapter #2
 24...00 15 5d 67 6f af ......Hyper-V Virtual Ethernet Adapter #3
 19...ca ff 28 04 ba 1f ......Microsoft Wi-Fi Direct Virtual Adapter 25...da ff 28 04 ba 1f ......Microsoft Wi-Fi Direct Virtual Adapter #2
 11...00 ff 6b a3 f7 80 ......TAP-Windows Adapter V9 22...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1 16...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8 23...c8 ff 28 04 ba 20 ......Bluetooth Device (Personal Area Network) 1...........................Software Loopback Interface 1
 14...c8 ff 28 04 ba 1f ......Qualcomm Atheros QCA61x4A Wireless Network Adapter

我这里是编号是16,而后映射Service的IP到虚拟机IP:

C:\Users\Administrator>route add 10.96.0.0 MASK 255.255.0.0 192.168.3.131 IF 16 操做完成!

完成后咱们能够直接使用 http://10.96.173.2/api/values 这个地址在浏览器里访问了:

咱们如今能够经过Service的IP来进行访问,可是这不是咱们想要的,实际项目里咱们不想要去关心某个Api服务的具体IP,而且这个IP仍是会变的,咱们但愿IP的获取是自动的,即IP的变化对调用方是无感知的,其实就是咱们常说的服务注册和发现,咱们只须要经过一个服务的标识名就能够访问到服务,而且自动负载均衡,而Traefik则能够帮咱们实现这些。

 

3、Traefik路由.net core api

由于咱们以前已经部署过Traefik了,因此在这里咱们只须要写一个.net core api的ingress文件就能够,k8s-api-ingress.yaml:

apiVersion: extensions/v1beta1 kind: Ingress metadata: name: k8s-api namespace: netcore spec: rules: - host: k8s.api.com http: paths: - path: / backend: serviceName: k8s-api servicePort: http 

运行该文件:

kubectl apply -f k8s-api-ingress.yaml

查看对应的ingress状态:

[root@localhost k8s-netcore]# kubectl get ingress -n netcore NAME HOSTS ADDRESS PORTS AGE k8s-api   k8s.api.com             80      45m

这个时候Traefik的UI界面已经有了咱们的k8s-api-ingress了:

 

 而后配置下host文件就能够访问了:

这个时候咱们在使用时已经不须要关心服务的具体IP,使用的是k8s.api.com这个host地址,就算IP变化了,Traefik也会实时感知,调用方无需作任何改变。

相关文章
相关标签/搜索