一、 准备

本篇的要求是在前三篇的基础上已经搭建好的本地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. Api接口文档管理工具,你知道哪些呢?

    上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的 ...

  2. 并发、线程的基本概念&线程启动结束

    并发.进程.可执行程序.进程.线程的基本概念 1.并发 并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段 ...

  3. Gym 101470 题解

    A:Banks 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt&q ...

  4. CodeM 美团资格赛 思维 dfs

    链接:https://www.nowcoder.com/acm/contest/138/C来源:牛客网 世界杯就要开始啦!真真正正的战斗从淘汰赛开始,现在我们给出球队之间的胜负概率,来预测每支球队夺冠 ...

  5. (六十四)c#Winform自定义控件-温度计(工业)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  6. 《Ansible自动化运维:技术与佳实践》第二章读书笔记

    Ansible 安装与配置 本章主要讲的是 Ansible 安装与基本配置,主要包含以下内容: Ansible 环境准备 安装 Ansible 配置运行环境 Ansible 环境准备 从 GitHub ...

  7. http压力测试工具及使用说明

    http压力测试工具及使用说明 转 说明:介绍几款简单.易使用http压测工具,便于研发同学,压测服务,明确服务临界值,寻找服务瓶颈点. 压测时候可重点以下指标,关注并发用户数.TPS(每秒事务数量) ...

  8. 代码整洁 vs 代码肮脏

    写出整洁的代码,是每个程序员的追求.<clean code>指出,要想写出好的代码,首先得知道什么是肮脏代码.什么是整洁代码:然后通过大量的刻意练习,才能真正写出整洁的代码. WTF/mi ...

  9. 关于格林尼治时间(GMT)和DateTime相互转换的分享

    普及一下什么是格林尼治时间? 世界时UT即格林尼治 平太阳时间,是指格林尼治所在地的标准时间,也是表示地球自转速率的一种形式.以地球自转为基础的时间计量系统.地球自转的角度可用地方子午线相对于地球上的 ...

  10. AirFlow简介

    1, 简介 ​ Airflow是一个可编程,调度和监控的工作流平台,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行.airflow提供了丰富的命令行工具用于系统管控 ...