tnblog
首页
视频
资源
登录

.netcore 通过Flurl验证k8s内部访问与获取环境变量

7220人阅读 2020/4/14 10:52 总访问:3258580 评论:0 收藏:1 手机
分类: 容器编排

Kubernetes

.netcore验证k8s内部访问与获取环境变量


创建k8s-name项目


项目结构如下

k8s-name的项目结构

实验过程

Created with Raphaël 2.1.2k8s-demo项目为起始点请求ValuesController控制器Get接口通过INameService接口去请求name-api数据请求结果执行框2返回结果报错yesno

环境设置

安装 Flurl 相关包

  1. dotnet add package Flurl --version 3.0.0-pre3
  2. dotnet add package Flurl.Http --version 3.0.0-pre3

内容如下


INameService.cs

  1. public interface INameService
  2. {
  3. Task<string> GetName();
  4. }


NameService.cs

  1. public class NameService:INameService
  2. {
  3. private readonly string _nameUrl = "http://name-api/name";
  4. public async Task<string> GetName()
  5. {
  6. return await _nameUrl.GetStringAsync();
  7. }
  8. }


Startup.cs—>ConfigureServices

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllers();
  4. services.AddSingleton<INameService,NameService>();
  5. }


ValuesController.cs

  1. [ApiController]
  2. [Route("[controller]")]
  3. public class ValuesController : ControllerBase
  4. {
  5. private readonly INameService _nameService;
  6. public ValuesController(INameService nameService){
  7. _nameService = nameService;
  8. }
  9. [HttpGet]
  10. public async Task<ActionResult<string>> Get(){
  11. return "hello," + await _nameService.GetName();
  12. }
  13. }


Dockerfile

  1. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
  2. WORKDIR /app
  3. EXPOSE 80
  4. EXPOSE 443
  5. FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
  6. WORKDIR /src
  7. COPY . k8s-demo/
  8. RUN pwd
  9. RUN ls
  10. RUN dotnet restore "k8s-demo/k8s-demo.csproj"
  11. COPY . .
  12. WORKDIR "/src/k8s-demo"
  13. RUN pwd
  14. RUN ls
  15. RUN mkdir -p /app/build
  16. RUN mkdir -p /app/publish
  17. RUN dotnet build "k8s-demo.csproj" -c Release -o /app/build
  18. FROM build AS publish
  19. RUN dotnet publish "k8s-demo.csproj" -c Release -o /app/publish
  20. FROM base AS final
  21. WORKDIR /app
  22. COPY --from=publish /app/publish .
  23. ENTRYPOINT ["dotnet", "k8s-demo.dll"]


Deploy.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: k8s-demo
  5. namespace: netcore
  6. labels:
  7. name: k8s-demo
  8. spec:
  9. replicas: 2
  10. selector:
  11. matchLabels:
  12. name: k8s-demo
  13. template:
  14. metadata:
  15. labels:
  16. name: k8s-demo
  17. spec:
  18. containers:
  19. - name: k8s-demo
  20. image: aidasi/k8sdemoapi:latest
  21. ports:
  22. - containerPort: 80
  23. imagePullPolicy: Always
  24. ---
  25. kind: Service
  26. apiVersion: v1
  27. metadata:
  28. name: k8s-demo
  29. namespace: netcore
  30. spec:
  31. type: NodePort
  32. ports:
  33. - port: 80
  34. targetPort: 80
  35. selector:
  36. name: k8s-demo


创建name-api项目


项目结构如下

name-api的项目结构

实验过程

Created with Raphaël 2.1.2name-api项目为起始点请求http://name-api/Values请求结果

内容如下


NameController.cs
环境变量参考:https://kubernetes.io/zh/docs/concepts/services-networking/service/

  1. [ApiController]
  2. [Route("[controller]")]
  3. public class NameController : ControllerBase
  4. {
  5. [HttpGet]
  6. public ActionResult<string> Get(){
  7. var host = Environment.GetEnvironmentVariable("NAME_API_SERVICE_HOST");
  8. if(string.IsNullOrEmpty(host))
  9. return "empty";
  10. return host;
  11. }
  12. }


Dockerfile

  1. FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
  2. WORKDIR /app
  3. EXPOSE 80
  4. EXPOSE 443
  5. FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
  6. WORKDIR /src
  7. COPY . name-api/
  8. RUN dotnet restore "name-api/name-api.csproj"
  9. COPY . .
  10. WORKDIR "/src/name-api"
  11. RUN mkdir -p /app/build
  12. RUN mkdir -p /app/publish
  13. RUN dotnet build "name-api.csproj" -c Release -o /app/build
  14. FROM build AS publish
  15. RUN dotnet publish "name-api.csproj" -c Release -o /app/publish
  16. FROM base AS final
  17. WORKDIR /app
  18. COPY --from=publish /app/publish .
  19. ENTRYPOINT ["dotnet", "name-api.dll"]


Deploy.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: name-api
  5. namespace: netcore
  6. labels:
  7. name: name-api
  8. spec:
  9. replicas: 2
  10. selector:
  11. matchLabels:
  12. name: name-api
  13. template:
  14. metadata:
  15. labels:
  16. name: name-api
  17. spec:
  18. containers:
  19. - name: name-api
  20. image: aidasi/name-api:v1
  21. ports:
  22. - containerPort: 80
  23. imagePullPolicy: Always
  24. ---
  25. kind: Service
  26. apiVersion: v1
  27. metadata:
  28. name: name-api
  29. namespace: netcore
  30. spec:
  31. type: NodePort
  32. ports:
  33. - port: 80
  34. targetPort: 80
  35. selector:
  36. name: name-api


发布k8s-name与name-api项目


发布k8s-name项目到 aidasi/k8sdemoapi:v2


  1. 通过 Xftp 上传项目


    Xftp


  1. 到指定目录下生成项目


    项目截图

docker build -t aidasi/k8sdemoapi:v2 .

项目build

发布name-api项目到 aidasi/name-api:v1



同理

docker build -t aidasi/name-api:v1 .


name-api的发布


查看所有镜像结果


查看所有镜像


上传所有镜像


docker push aidasi/name-api:v1
docker push aidasi/k8sdemoapi:v2




Hub查看


部署项目


部署name-api项目到k8s中

kubectl apply -f deploy.yaml



接下来把k8s-demo从v1更新到v2

kubectl apply -f deploy.yaml


测试一下

kubectl proxy



为什么这里是empty呢?
我当时写代码的时候把环境变量 Name_API_SERVICE_HOST 写错成 Name_API_SERVICE_HOST 了
但我已经在代码中做好修改了
所以大家访问的结果应该是
hello,(Pod ip)

Hub已经更新了,请大家放心


扩展进入pod指令

kubectl -n netcore exec -it name-api-d47996547-hcpdj -c name-api -- sh




靓仔,给个关注嘛!!!


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

.netcore 使用缓存

1.Startup.csservices.AddMemoryCache(); services.AddMvc();2.封装Logger类[Route(&quot;api/todo&quot;)] [Authorize] ...

.netcore 使用分布式缓存(docker+redis)

1. 通过docker创建 Redis执行命令:dockerrun--nameasp-redis-p6379:6379-dredis查看redis状态:dockerps可以发现alreadywo...

.netcore3.0 Ocelot 制作简单负载均衡 (一)

开发环境环境版本:vs2019框架版本:.netCore 3.0注意:.netCore 3.1 Ocelot 暂时不支持我这种方式!1.项目创建创建的项目...

.netcore3.1 Abp+vue 实战 (一)

ABP前言一个应用程序框架和起点的ASP.NET MVC web应用程序与最佳实践和最流行的工具!(它是这样说的)1.项目的创建创建项...

.netcore3.1 consul服务集群

前言Consul是一种服务网络解决方案,可跨任何运行时平台以及公共或私有云连接和保护服务简而言之:集群下载地址环境版本:v...

.netcore3.1 Ocelot 与 Consul 熔断限流与缓存

目录与前言目录链接:.net core Ocelot 简单网关集群熔断架构整合目录基于上一篇文章展开 Ocelot 与 Consul 进行合并创建一...

.netcore 3.x 与 grpc

目录 本篇文章主要讲解如下内容 一。grpc在 .Net Core 3.x 中的应用 二。grpc如何分段上传图片 代码与实现过程比较简单,...

.netcore运用IServiceScope实现全局服务持续化注入

IServiceScope实现全局服务持续化注入[TOC] 创建 GloablePullWorkFlow.cs 类 public class GloablePullWorkFlow { ...

.netcore配置MarkDown的学习之路 (一)

前言MarkDown讲述 (开始使用)现在很多人都自己开发一个博客平台分享技术,老程序员都说干程序员如果没有开发出来一个...

.netcore 通过Flurl验证k8s内部访问与获取环境变量 (二)

.netcore验证k8s内部访问与获取环境变量 (二)[TOC] 修改k8s-name项目 NameController.cs [ApiController] ...

netcore项目时,Debug文件夹下多一个netcoreapp文件夹的解决办法

解决办法:编辑.csproj文件,在 &lt;TargetFramework&gt;netcoreapp2.1&lt;/TargetFramework&gt; 后加入“是否追加目标框...

netcore加Consul实现简单服务实例负载

今天,总结一下之前学习的Consul基础(后续如果有时间的话,再加上Ocelot部分):新建一个WebApi项目:模拟服务创建一个Web...

.netcore 3.1 运用 Json Patch 时的常见问题

.netcore 3.1 运用Json Patch[TOC] JSON Patch是一种使用API显式更新文档的方法。它本身是一种契约,用于描述如何修改文...

.netcore 解析JWT中间Base64报错

.netcore 解析JWT中间Base64报错[TOC] 解析时改为var jsonPayload = Base64UrlEncoder.Decode(basepayload); var claim...
这一世以无限游戏为使命!
排名
2
文章
621
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术