zoukankan      html  css  js  c++  java
  • 【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

     

     # 未完待续

     

     

  • 相关阅读:
    [Swift]LeetCode101. 对称二叉树 | Symmetric Tree
    [Swift]LeetCode88. 合并两个有序数组 | Merge Sorted Array
    [Swift]LeetCode70. 爬楼梯 | Climbing Stairs
    中国象棋程序的设计与实现(十一)--第2次回答CSDN读者的一些问题
    极速响应Excel数据报表请求的一种方法
    极速响应Excel数据报表请求的一种方法
    中国象棋程序的设计与实现(十)--棋盘的定义和绘制
    中国象棋程序的设计与实现(十)--棋盘的定义和绘制
    中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
    中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
  • 原文地址:https://www.cnblogs.com/oscarli/p/12800249.html
Copyright © 2011-2022 走看看