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
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16463827.html
欢迎各位大佬们评论指正
QQ讨论群:610129902 
 

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号