利用k8s yaml配置文件起一個http能夠讓外部訪問


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的節點的 所以很好的負載均衡了




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM