1、 準備nginx
本篇的要求是在前三篇的基礎上已經搭建好的本地k8s以及部署了Traefik,咱們將會使用Traefik Ingress來訪問.net core api,比較簡單,作個記錄,若是尚未搭建k8s或者尚未部署Traefik的同窗能夠先去看下Kubernetes 系列的前三篇。api
2、k8s部署.net core api瀏覽器
首先咱們要新建一個.net core api,默認配置便可,而後打包鏡像上傳到倉庫,這一步就省略了,以前專門寫過一篇,你們能夠看下哈。app
準備.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:less
kubectl apply -f k8s-api.yaml
經過如下命令查看Pod狀態:curl
[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:oop
apiVersion: v1 kind: Service metadata: name: k8s-api namespace: netcore spec: selector: k8s-app: k8s-api ports: - name: http port: 80 targetPort: 80
運行該Service部署文件:url
kubectl apply -f k8s-api-service.yaml
經過如下命令查看Service狀態:spa
[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:\Users\Administrator>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:\Users\Administrator>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則能夠幫咱們實現這些。
3、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也會實時感知,調用方無需作任何改變。