一、 准备

本篇的要求是在前三篇的基础上已经搭建好的本地k8s以及部署了Traefik,我们将会使用Traefik Ingress来访问.net core api,比较简单,做个记录,如果还没有搭建k8s或者还没有部署Traefik的同学可以先去看下Kubernetes 系列的前三篇。

二、k8s部署.net core api

首先我们要新建一个.net core api,默认配置即可,然后打包镜像上传到仓库,这一步就省略了,之前专门写过一篇,大家可以看下哈。

准备.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:
selector:
matchLabels:
k8s-app: k8s-api
template:
metadata:
labels:
k8s-app: k8s-api
spec:
containers:
- name: k8s-api
image: ****** --这里是你的.net core api镜像名称
ports:
- containerPort:

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

kubectl apply -f k8s-api.yaml

通过以下命令查看Pod状态:

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

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

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

运行该Service部署文件:

kubectl apply -f k8s-api-service.yaml

通过以下命令查看Service状态:

[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> /TCP 12s
k8s-demo NodePort 10.109.237.67 <none> :/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
===========================================================================
接口列表
... ff 7a e5 a0 e9 ......TAP-Windows Adapter V9 #
... ab 3a 1c e8 ......Realtek PCIe GBE Family Controller
...4a 1e f7 ......Hyper-V Virtual Ethernet Adapter
... 5d 6d ......Hyper-V Virtual Ethernet Adapter #
... 5d 6f af ......Hyper-V Virtual Ethernet Adapter #
...ca ff ba 1f ......Microsoft Wi-Fi Direct Virtual Adapter
...da ff ba 1f ......Microsoft Wi-Fi Direct Virtual Adapter #
... ff 6b a3 f7 ......TAP-Windows Adapter V9
... c0 ......VMware Virtual Ethernet Adapter for VMnet1
16...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
...c8 ff ba ......Bluetooth Device (Personal Area Network)
...........................Software Loopback Interface
...c8 ff 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
操作完成!

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

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

三、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 45m

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

然后配置下host文件就可以访问了:

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

Kubernetes 系列(四):使用Traefik访问.net core api的更多相关文章

  1. Kubernetes系列(四) StatefulSet

    作者: LemonNan 原文地址: https://juejin.im/post/6870071267438329869 Kubernetes系列(四) StatefulSet Kubernetes ...

  2. 探索ASP.Net Core 3.0系列四:在ASP.NET Core 3.0的应用中启动时运行异步任务

    前言:在本文中,我将介绍ASP.NET Core 3.0 WebHost的微小更改如何使使用IHostedService在应用程序启动时更轻松地运行异步任务. 翻译 :Andrew Lock   ht ...

  3. 【Kubernetes 系列四】Kubernetes 实战:管理 Hello World 集群

    目录 1. 创建集群 1.1. 安装 kubectl 1.1.1. 安装 kubectl 到 Linux 1.1.2. 安装 kubectl 到 macOS 1.1.3. 安装 kubectl 到 W ...

  4. kubernetes 创建用户配置文件来访问集群API

    创建一个账号 kubectl create serviceaccount def-ns-admin 绑定集群权限 kubectl create rolebinding def-ns-admin --c ...

  5. 探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs

    原文:探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs 前言:.NET Core 3.0 SDK包含比以前版本更多的现成模板. 在本文中,我将 ...

  6. Kubernetes系列(五) Ingress

    作者: LemonNan 原文地址: https://juejin.im/post/6878269825639317517 Kubernetes 系列 Kubernetes系列(一) Pod Kube ...

  7. C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    C#中的函数式编程:递归与纯函数(二)   在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...

  8. Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)

    Ajax跨域问题及解决方案   目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...

  9. kubernetes系列(十四) - 存储之PersistentVolume

    1. PersistentVolume(PV)简介 1.1 为什么需要Persistent Volume(PV) 1.2 PersistentVolume(PV)和Volume的区别 1.3 PV和P ...

随机推荐

  1. C# winform语音提示

    1.SpeechSynthesizer文字转音频 项目添加引用:System.Speech using(SpeechSynthesizer speech = new SpeechSynthesizer ...

  2. winform和WPF的那点事~

    一.定义 1.Winform的定义: WinForm是·Net开发平台中对Windows Form的一种称谓. 2.WPF的定义: WPF(Windows Presentation Foundatio ...

  3. python控制窗口移动(画圆)

    import win32con import win32gui import time import math notepad = win32gui.FindWindow("Notepad& ...

  4. Badboy - variable setter

    参考: http://leafwf.blog.51cto.com/872759/1117646 http://www.51testing.com/html/00/130600-1367743.html ...

  5. CF 435B Little Pony and Harmony Chest

    Little Pony and Harmony Chest 题解: 因为 1 <= ai <= 30 所以  1 <= bi <= 58, 因为 59 和 1 等效, 所以不需 ...

  6. codeforces 766 D. Mahmoud and a Dictionary(种类并查集+stl)

    题目链接:http://codeforces.com/contest/766/problem/D 题意:给你n个单词,m个关系(两个单词是反义词还是同义词),然后问你所给的关系里面有没有错的,最后再给 ...

  7. webstorm 突然不能用了?解决办法~

    首先   感谢http://idea.lanyus.com 提供的试用方法,就在刚刚,webstorm突然就不能使了,http://idea.lanyus.com立马给出了解决办法,就是在hosts文 ...

  8. mysql之innodb存储引擎---BTREE索引实现

    在阅读本篇文章可能需要一些B树和B+树的基础 一.B树和B+树的区别 1.B树的键值不会出现多次,而B+树的键值一定会出现在叶子节点上,而且在非叶子节点也可能会重复出现2.B数存储真实数据,B+数叶子 ...

  9. springboot以jar运行时参数传递

    springboot以jar运行时参数传递 spring boot项目我们都习惯以内嵌tomcat方式.直接打包成jar,运行时使用: java -jar XXX.jar  --spring.prof ...

  10. Java Web总结(一)-- 入门

    一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...