• Kubernetes 系列(四):使用Traefik访问.net core api


    一、 准备

    本篇的要求是在前三篇的基础上已经搭建好的本地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: 2
      selector:
        matchLabels:
          k8s-app: k8s-api
      template:
        metadata:
          labels:
            k8s-app: k8s-api
        spec:
          containers:
          - name: k8s-api
            image: ******    --这里是你的.net core api镜像名称
            ports:
            - containerPort: 80

    运行以下命令部署.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   1/1     Running   2          12d
    nginx-deploy-779fcd779f-8nkdp   1/1     Running   2          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: 80
        targetPort: 80

    运行该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>        80/TCP         12s
    k8s-demo   NodePort    10.109.237.67   <none>        80:30335/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:UsersAdministrator>route print
    ===========================================================================
    接口列表
     13...00 ff 7a e5 a0 e9 ......TAP-Windows Adapter V9 #2
      9...54 ab 3a 47 1c e8 ......Realtek PCIe GBE Family Controller
     27...4a 15 73 1e 60 f7 ......Hyper-V Virtual Ethernet Adapter
      5...00 15 5d 01 6d 83 ......Hyper-V Virtual Ethernet Adapter #2
     24...00 15 5d 67 6f af ......Hyper-V Virtual Ethernet Adapter #3
     19...ca ff 28 04 ba 1f ......Microsoft Wi-Fi Direct Virtual Adapter
     25...da ff 28 04 ba 1f ......Microsoft Wi-Fi Direct Virtual Adapter #2
     11...00 ff 6b a3 f7 80 ......TAP-Windows Adapter V9
     22...00 50 56 c0 00 01 ......VMware Virtual Ethernet Adapter for VMnet1
     16...00 50 56 c0 00 08 ......VMware Virtual Ethernet Adapter for VMnet8
     23...c8 ff 28 04 ba 20 ......Bluetooth Device (Personal Area Network)
      1...........................Software Loopback Interface 1
     14...c8 ff 28 04 ba 1f ......Qualcomm Atheros QCA61x4A Wireless Network Adapter

    我这里是编号是16,然后映射Service的IP到虚拟机IP:

    C:UsersAdministrator>route add 10.96.0.0 MASK 255.255.0.0 192.168.3.131 IF 16
     操作完成!

    完成后我们可以直接使用 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             80      45m

    这个时候Traefik的UI界面已经有了我们的k8s-api-ingress了:

     然后配置下host文件就可以访问了:

    这个时候我们在使用时已经不需要关心服务的具体IP,使用的是k8s.api.com这个host地址,就算IP变化了,Traefik也会实时感知,调用方无需做任何改变。

  • 相关阅读:
    fiddler教程--拦截并篡改
    string
    希尔排序(缩小增量排序)
    k-选取问题
    完善版本散列表
    c++ BST继承自二叉树
    DEDECMS与DZ论坛如何整合,DEDE网站调用DZ内容
    DEDECMS如何实现定时发布文章
    DEDECMS如何设置图片上传加水印
    DEDE如何制作不同背景的列表
  • 原文地址:https://www.cnblogs.com/weiBlog/p/10589184.html
Copyright © 2020-2023  润新知