kind搭建k8s集群中部署AspNetCore应用

前面使用kind快速搭建本地k8s集群 介绍了使用kind搭建k8s集群,这节介绍使用kind搭建的k8s集群中部署.net core 的api应用程序。

1. 准备AspNetCore WebApi项目

项目结构如下:

 

 

 

添加一个Controller,返回当前其中一个IP:

namespace WebApiK8S.Test.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        public string Get()
        {
            var hostName = Dns.GetHostName();
            var hostIP = Dns.GetHostEntry(hostName).AddressList;
            return hostIP[0].ToString();
        }
    }
}

 

 

编写Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

COPY . .
ENTRYPOINT ["dotnet", "WebApiK8S.Test.dll"]

 

 

2、制作镜像

项目编译后拖到Centos系统中

 

 

 

制作镜像

cd /home/website/WebApiK8S.Test/

docker build -t webapik8stest .

 

 

 

 

 

 

 


3、编写发布应用的demoDeployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo-deployment
  labels:
    k8s-app: k8s-demo-web
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: k8s-demo-web
  template:
    metadata:
      labels:
        k8s-app: k8s-demo-web
    spec:
      containers:
      - name: k8s-demo
        image: webapik8stest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: k8s-demo-web
  name: k8s-demo-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    name: http
    nodePort: 30000
  selector:
    k8s-app: k8s-demo-web

 

4. 新建K8s集群,暴露80、443、30000端口

用kind创建K8s时,是相当在本地运行了一个容器,而K8s Cluster就运行在这个容器中。

所以,如果想从外部访问kind K8s的话,就需要把这个容器的端口(K8s的端口)暴露出来。

为了下一步测试,我们重新创建一个新的K8s cluster并且把80、443、30000端口暴露出来。

运行下列命令删除现在的k8s cluster

kind delete cluster --name tsk8s

  

运行下列命令创建新的k8s cluster

cat <<EOF | kind create cluster --name tsk8s --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
  - containerPort: 30000
    hostPort: 30000
    protocol: TCP
EOF

说明:

  • extraPortMappings:把K8s容器(相当于K8s所在的服务器)端口暴露出来,这里暴露了80、443、30000
  • node-labels:只允许Ingress controller运行在有"ingress-ready=true"标签的node上

运行结果

  

这时可以看到80、443、30000端口已经暴露出来了

  

 注意:如果是在公司代理环境下,我们要在K8s容器中设置代理,才可以正常进行下面的测试,设置代理请参考上一篇文章《代理环境下在WSL2中用Kind创建Kubernetes集群》”

5. 添加镜像

 不能直接使用主机上的镜像,需要导入到kind的节点(容器中)

kind load docker-image webapik8stest --name tsk8s

 

 

说明:

  • webapik8stest:创建的镜像名
  • tsk8s:创建的集群名

 

6. 创建deployment

将demoDeployment.yaml文件拖到Centos系统中

 

 

 创建deployment并查看pod,svc状态:

kubectl create -f  demoDeployment.yaml
kubectl get svc,pod -o wide

 

 

从上图可以看到对外暴露pod的端口为30000,且该api运行了两个副本。

 

7、在浏览器访问api

http://192.168.192.140:332/api/test

 

 

 http://192.168.192.140:30000/WeatherForecast

 

 

curl  http://192.168.192.140:30000/WeatherForecast

 

 

 

访问成功,证明我们的aspnetcore应用成功部署在K8S上!

 

鸣谢:

https://blog.csdn.net/weixin_42758299/article/details/120908185

https://www.cnblogs.com/roluodev/p/13824191.html

https://www.cnblogs.com/laochiji/p/13813743.html

posted @ 2022-07-10 19:21  春光牛牛  阅读(194)  评论(0编辑  收藏  举报