写点什么

模块八 - 作业二

作者:hunk
  • 2022 年 3 月 06 日
  • 本文字数:2336 字

    阅读完需:约 8 分钟

Service

https://kubernetes.io/zh/docs/concepts/services-networking/service/


  • 四层负载均衡,由 kube-proxy 来配置,早期默认 iptable, 在 1.11 之后变成 ipvs,这两个都是 netfilter 框架的产物


  • ipvs 模式下,kube-proxy 监视 Kubernetes 服务和端点,调用 netlink 接口相应地创建 IPVS 规则, 并定期将 IPVS 规则与 Kubernetes 服务和端点同步。 该控制循环可确保 IPVS 状态与所需状态匹配。访问服务时,IPVS 将流量定向到后端 Pod 之一。


  • IPVS 代理模式基于类似于 iptables 模式的 netfilter 挂钩函数, 但是使用哈希表作为基础数据结构,并且在内核空间中工作。 这意味着,与 iptables 模式下的 kube-proxy 相比,IPVS 模式下的 kube-proxy 重定向通信的延迟要短,并且在同步代理规则时具有更好的性能。 与其他代理模式相比,IPVS 模式还支持更高的网络流量吞吐量。


  • IPVS 提供了更多选项来平衡后端 Pod 的流量。 这些是:

  • rr:轮替(Round-Robin)

  • lc:最少链接(Least Connection),即打开链接数量最少者优先

  • dh:目标地址哈希(Destination Hashing)

  • sh:源地址哈希(Source Hashing)

  • sed:最短预期延迟(Shortest Expected Delay)

  • nq:从不排队(Never Queue)


四种类型

  • Cluster IP 集群内访问

  • NodePort 暴露给外部访问 (kubenode:port) 30000~33000

  • loadBalancer 暴露给外部访问 ( 依赖外部负载均衡器 )metallb(https://github.com/kubernetes/cloud-provider-aws)

  • ExternalName 类似 cname,可以实现跨 namespace 的 ingress

YAMLapiVersion: v1kind: Servicemetadata: name: my-service namespace: prodspec: type: ExternalName externalName: my.database.example.com

当查找主机 my-service.prod.svc.cluster.local 时,集群 DNS 服务返回 CNAME 记录, 其值为 my.database.example.com


https://www.infoq.cn/article/p0v9d4br7udzwtgihuyq

ingress

社区推荐 nginx-ingress


通俗意义上的七层负载均衡,service 和 pod 仅可在集群内部网络中通过 IP 地址访问。所有到达边界路由器的流量或被丢弃或被转发到其他地方。从概念上讲,可能像下面这样:

Plain Text internet | ------------ [Services]

Ingress 是授权入站连接到达集群服务的规则集合。

Plain Text internet | [Ingress] --|-----|-- [Services]

你可以给 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过 POST Ingress 资源到 API server 的方式来请求 ingress。 Ingress controller 负责实现 Ingress,通常使用负载均衡器,它还可以配置边界路由和其他前端,这有助于以高可用的方式处理流量。


安装:

https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-helm/


Shell Session~ ❯❯❯ helm repo add nginx-stable https://helm.nginx.com/stable~ ❯❯❯ helm install ingress-nginx nginx-stable/ingress-nginx --create-namespace --namespace ingressNAME: ingress-nginxLAST DEPLOYED: Sun Feb 27 02:44:22 2022NAMESPACE: ingressSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:The ingress-nginx controller has been installed.It may take a few minutes for the LoadBalancer IP to be available.You can watch the status by running 'kubectl --namespace ingress get services -o wide -w ingress-nginx-controller'

An example Ingress that makes use of the controller:

  apiVersion: networking.k8s.io/v1

  kind: Ingress

  metadata:

    name: example

    namespace: foo

  spec:

    ingressClassName: nginx

    rules:

      - host: www.example.com

        http:

          paths:

            - backend:

                service:

                  name: exampleService

                  port:

                    number: 80

              path: /

    # This section is only required if TLS is to be enabled for the Ingress

    tls:

      - hosts:

        - www.example.com

        secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1

  kind: Secret

  metadata:

    name: example-tls

    namespace: foo

  data:

    tls.crt: <base64 encoded cert>

    tls.key: <base64 encoded key>

  type: kubernetes.io/tls

~ ❯❯❯ kubectl get pod -n ingress

NAME                                      READY   STATUS    RESTARTS   AGE

ingress-nginx-controller-54bfb9bb-vgdtm   1/1     Running   0          12h

~ ❯❯❯ kubectl get svc -n ingress

NAME                                 TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)                      AGE

ingress-nginx-controller             LoadBalancer   10.0.78.161   52.170.175.195   80:31909/TCP,443:32228/TCP   12h

ingress-nginx-controller-admission   ClusterIP      10.0.222.50   <none>           443/TCP                      12h

~ ❯❯❯


Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。


Shell SessionapiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: httpserver-80spec: ingressClassName: nginx rules: - host: mod8.51.cafe http: paths: - backend: service: name: httpsvc port: number: 80 path: / pathType: Prefix

发布于: 刚刚阅读数: 2
用户头像

hunk

关注

还未添加个人签名 2019.01.23 加入

还未添加个人简介

评论

发布
暂无评论
模块八-作业二_云原生训练营_hunk_InfoQ写作平台