【k8s】4-Service轉發規則 ingress 七層代理


Service

  工作模式: userspace,iptables,ipvs

  類型: 

  1. ExternalName: 用於將集群外部的服務引入到集群內部,在集群內部可直接訪問來獲取服務。
      它的值必須是 FQDN, 此FQDN為集群內部的FQDN, 即: ServiceName.Namespace.Domain.LTD.
      然后CoreDNS接受到該FQDN后,能解析出一個CNAME記錄, 該別名記錄為真正互聯網上的域名.
      如: www.test.com, 接着CoreDNS在向互聯網上的根域DNS解析該域名,獲得其真實互聯網IP.
  2. ClusterIP: 用於為集群內Pod訪問時,提供的固定訪問地址,默認是自動分配地址,可使用ClusterIP關鍵字指定固定IP.
  3. NodePort: 用於為集群外部訪問Service后面Pod提供訪問接入端口.
    這種類型的service工作流程為:
      Client----->NodeIP:NodePort----->ClusterIP:ServicePort----->PodIP:ContainerPort
  4. LoadBalancer: 用於當K8s運行在一個雲環境內時,若該雲環境支持LBaaS,則此類型可自動觸發創建
        一個軟件負載均衡器用於對Service做負載均衡調度.
    因為外部所有Client都訪問一個NodeIP,該節點的壓力將會很大, 而LoadBalancer則可解決這個問題。
    而且它還直接動態監測后端Node是否被移除或新增了,然后動態更新調度的節點數。

資源記錄

         SVC_NAME.NS_NAME.DOMAIN.LTD.

         特定域名后綴 svc.cluster.local. redis.default.svc.cluster.local.

        

    # 修改會話粘性

    Kubectl path svc myapp -p ‘{“spec”:{“sessionAffinity”:”ClientIp”}}’

    # 解析地址

    dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10

實現ipvs代理

vim /etc/sysconfig/kubelet

KUBE_PROXY_MODE=ipvs

ip_vs, ip_vs_rr, ip_vs_sh, ip_vs_wrr, nf_conntrack_ipv4

Ingress Controller七層調度

  HAProxy、默認使用Nginx 、服務網格 Envoy 、微服務 Traefik

  1、根據域名做負載到不同服務

  2、url映射 /eshop  /bbs  /api 不同服務

功能 

# 暴露端口
  負載均衡:ingress-nginx kind:service namespace: ingress-nginx
# 負7層代理
  Pod名稱:nginx-ingress-controller-5bb8fb4bb6-k2x28 kind:POD namespace: ingress-nginx

# 對象轉發配置模板 主機或者 api路徑 https
  名稱: ingress-myapp kind:ingress namespace: default

# 負載Pod 后端群組
  service myapp default
# selector 選擇Pod
  deployment Pod: deployment-demo default

 

# 安裝nginx-ingress

# 參考連接 https://github.com/kubernetes/ingress-nginx/blob/nginx-0.30.0/docs/deploy/index.md

 

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml

kubectl create –f  mandatory.yaml

kubectl create –f  service-nodeport.yaml

 

POD_NAMESPACE=ingress-nginx

POD_NAME=$(kubectl get pods -n $POD_NAMESPACE -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[0].metadata.name}')

kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version

 

 

# Service Pod
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
spec:
  selector:
    app: tomcat
    release: canary
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: ajp
    targetPort: 8009
    port: 8009
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat-myapp
        image: tomcat:8
        ports:
        - name: http
          containerPort: 8080
        - name: ajp
          containerPort: 8009

 

 

# ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-mytomcat
  namespace: default
  annotations:
    kubernets.io/ingress.class: "nginx"
spec:
  rules:
  - host: tomcatnode
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat
          servicePort: 8080

 

# 生成自簽證書

openssl genrsa -out tls.key 2048

openssl req -new -x509 -key tls.key -out tls.crt –subj /C=CN/ST=Beijing/L=Beijing/O=Devops/CN=tomcatnode

 

# 創建密鑰關聯證書  

kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key

# 創建 ingress關聯證書
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-mytomcat-tls
  namespace: default
  annotations:
    kubernets.io/ingress.class: "nginx"
spec:
 tls: - hosts:
    - tomcatnode
    secretName: tomcat-ingress-secret
  rules:
  - host: tomcatnode
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat
          servicePort: 8080

 

 # 未完待續

 

 


免責聲明!

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



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