1、首先建一個http的Deployment
apiVersion: apps/v1 #版本信息 kind: Deployment #文件類型 metadata: #Deployment資源的元數據信息 name 和 labels必須有 name: http-deployment labels: app: http-label spec: #spec部分是該Deployment的規格說明。 replicas: 3 #副本數 意味着http的pod 會有三個 selector: #defines how the Deployment finds which Pods to manage 與下面的template定義的標簽一致 matchLabels: app: http-label template: #每個pod的模板配置信息在這里 metadata: #pod資源的元數據信息 labels必須有 不然上面的selector會選不到 labels: app: http-label spec: #spec描述Pod的規格,此部分定義Pod中每一個容器的屬性,name和image是必需的。 containers: - name: httpd image: httpd ports: - containerPort: 80
2、可以通過 kubectl apply -f http.yaml 來啟動上面的資源
[root@master1 test]# kubectl apply -f http.yaml deployment.apps/http-deployment configured [root@master1 test]# kubectl get pods NAME READY STATUS RESTARTS AGE http-deployment-6bd68845b-dhw72 0/1 ContainerCreating 0 7s http-deployment-6bd68845b-fqf8c 1/1 Running 0 33m http-deployment-6bd68845b-ksrt5 0/1 ContainerCreating 0 7s
3、這個時候pod里面的http服務只能集群內部訪問 看一下pod的網絡ip 這是虛擬的ip 通過net實現的
[root@master1 test]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES http-deployment-6bd68845b-dhw72 1/1 Running 0 15m 10.130.209.237 node1 <none> <none> http-deployment-6bd68845b-fqf8c 1/1 Running 0 48m 10.130.209.235 node1 <none> <none> http-deployment-6bd68845b-ksrt5 1/1 Running 0 15m 10.130.209.238 node1 <none> <none>
4、k8s集群內部所有節點都可以訪問到
[root@master1 test]# curl 10.130.209.237 <html><body><h1>It works!</h1></body></html> [root@master1 test]# curl 10.130.209.235 <html><body><h1>It works!</h1></body></html> [root@master1 test]# curl 10.130.209.238 <html><body><h1>It works!</h1></body></html> [root@master1 test]#
5、外面怎么訪問呢 k8s用 service 來做到的 pod的上層是service 兩者通過iptables交互
新建一個service的yaml httpSvc.yaml
apiVersion: v1 kind: Service #類型這次是Service了 metadata: name: http-svc spec: type: NodePort #NodePort沒有 外網不能訪問 只能集群訪問service接口 nodeport和service也是通過iptables轉發的 selector: app: http-label #這里的標簽 表示這個服務會選擇這種標簽的pod 作為他的后端服務 他來當pod外層的service 統一服務 ports: - protocol: TCP nodePort: 30001 #NodePort端口 用來外部訪問的 如果不設置,會隨機選一個范圍(30000~32767)
port: 8080 targetPort : 80
6、同理啟動一下 kubectl apply -f httpSvc.yaml
7、看看服務是否都ok
[root@master1 test]# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE http-svc NodePort 172.30.169.160 <none> 8080:30001/TCP 52m kubernetes ClusterIP 172.30.0.1 <none> 443/TCP 25h
8、可以集群訪問
[root@master1 test]# curl 172.30.169.160:8080 <html><body><h1>It works!</h1></body></html> [root@master1 test]#
9、外網訪問 我的主機ip是 192.168.10.1 在瀏覽器 輸入http://192.168.10.1:30001/

ps:每次訪問的是隨機去pod的節點的 所以很好的負載均衡了
