一、 准备

本篇的要求是在前三篇的基础上已经搭建好的本地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. 导航控制器的根控制器 是滚动性&普通的frame区别

    当一个控制器有navigationBar&tabBar: 1.当导航控制器根控制器是tableViewController时,tableView 的frame原点是屏幕左上角,当向tableV ...

  2. A-Graph Games_2019牛客暑期多校训练营(第三场)

    题意 给出一张无向图,定义S[x]表示与点x直接相连的点集,有两个操作 1 x y表示将第x到第y条边状态变化(若存在则删除,不存在则建立) 2 x y询问S[x]与S[y]是否相等 题解 有一个技巧 ...

  3. ACM-ICPC 2017 Asia Urumqi:A. Coins(DP) 组合数学

    Alice and Bob are playing a simple game. They line up a row of nn identical coins, all with the head ...

  4. 牛客小白月赛 G 异或 找规律

    链接:https://www.nowcoder.com/acm/contest/135/G来源:牛客网 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apoj ...

  5. kmp算法学习 与 传参试验(常回来看看)

    之前在codeforces上做了一道类似KMP的题目,但由于之前没有好好掌握,现在又基本忘记,并没能解答.下面是对KMP算法的一点小总结. 首先KMP算法的核心是纸在匹配过程中,利用模式串的前后缀来加 ...

  6. StackOverflow 周报 - 高质量问题的问答(Java、Python)

    这是 Stack Overflow 第三周周报,本周加入了 Python 的内容,原计划两篇 Java.两篇 Python.但明天过节所以今天就先把周报发了,两篇 Java.一篇 Python.公众号 ...

  7. java多线程之ThreadPoolExecutor

    ThreadPoolExecutor类 简介   java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须 ...

  8. 湘潭大学oj循环1-5

    #include <stdio.h>#include <stdlib.h> int main(){   int b,s,n;    int a[101]; A:scanf(&q ...

  9. 本地代码上传至github

    一. 环境及工具 1.下载并安装git版本管理工具 到 http://git-scm.com/downloads 下载并安装git版本管理工具 2.Windows客户端 3.配置github账号密码及 ...

  10. Cookie的临时存储和定时存储

    Cookie解决了不同请求的数据共享问题.是由服务器保存在客户端的小文本文件,包含了用户的信息,可以避免用户重复输入用户名和密码进行登录.浏览器请求Cookie,服务器响应时返回Cookie,浏览器存 ...