k8s-service

說明

服務內部的訪問

service如何訪問到pod

1.訪問到service(創建service如果指定了selector會自動創建對應的endpoint)

2.找到對應的endpoint

3.通過iptables找到路由到對應節點的kube-proxy

4.通過kube-proxy路由到對應的pod

如何定義一個sevice

apiVersion: v1
kind: Service
metadata:
  name: "order"
  namespace: "test"
spec:
  selector:
    app: "order"
  type: ClusterIP
  ports:
    - name: order-http
      port: 8000
      targetPort: 8000
    - name: order-grpc
      port: 8001
      targetPort: 8001

 

apiVersion: v1
kind: Service
metadata:
  name: my-service  # 服務的名稱
spec:
  selector:
    app: my-app  # 選擇器,指定服務所匹配的Pod
  ports:
    - protocol: TCP  # 服務使用的協議
      port: 80  # 服務暴露的端口
      targetPort: 8080  # 服務轉發到Pod的端口
  type: NodePort  # 服務的類型,可以是NodePort、ClusterIP、LoadBalancer等
  # 以下是可選的配置
  # loadBalancerIP: 192.168.1.100  # 如果服務類型爲LoadBalancer,可以指定負載均衡器的IP
  # externalTrafficPolicy: Local  # 控制流量的策略,可以是Local或者Cluster

相關命令

根據yml創建service
kubectl apply -f service.yaml
查看所有service: kubectl get services 查看特定service的詳細信息: kubectl describe service
<service-name> 刪除一個service: kubectl delete service <service-name> 編輯一個service: kubectl edit service <service-name> 替換一個service,通過新的YAML文件: kubectl replace -f <new-service-definition.yaml>

如何跨命名空間訪問

wget http://nginx-svc.{namespace}

如果自定義endpint 

應用場景,轉發請求到外部、比如遷移應用到k8s 一部分應用是k8s 一部分非k8s

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

 

apiVersion: v1
kind: Endpoints
metadata:
  name: my-service 與service一致
subsets:
  - addresses:
      - ip: 192.168.1.1  # 轉發的地址
    ports:
      - port: 8080  # 替換爲你的Pod的端口
kubectl apply -f service.yaml
kubectl apply -f endpoints.yaml

service如何代理到域名 

apiVersion: v1
kind: Service
metadata:
  name: my-external-service
spec:
  type: ExternalName
  externalName: example.com  # 將此處替換爲你的域名
  ports:
    - port: 80

屬性介紹

type

ClusterIp 集羣內部使用 轉發ip(默認)

ExternalName 域名方式

NodePort

LoadBalancer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章