• 【k8s】Ingress


    环境

    1. kubernetes 1.20.6
    2. Spring Boot 2.5.0-M3

    目标

    Service 已经可以提供外部访问的方式和负载均衡了,Ingress 也可以提供类似的功能。
    两者最大的区别是 Service 工作在第四层 TCP/IP,而 Ingress 工作在第七层 HTTP。
    Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管,可以简写为 ing。
    在使用 Ingress 之前,一定要保证有 Ingress Controller。

    示例

    默认情况下,k8s 集群中不存在 Ingress 资源。

    增加域名映射

    [root@master ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.56.101 master spring.k8s.jiangbo
    192.168.56.102 node1
    192.168.56.103 node2
    

    增加一个域名的映射,就可以通过域名访问到 k8s 集群的控制平面的 IP 地址。

    Deploy.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: spring-k8s
    spec:
      selector:
        matchLabels:
          app: spring-k8s
      template:
        metadata:
          labels:
            app: spring-k8s
        spec:
          containers:
            - name: spring-k8s
              image: jiangbo920827/spring-k8s:liveness
              ports:
                - containerPort: 8080
    

    Service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: spring-k8s
    spec:
      selector:
        app: spring-k8s
      ports:
        - port: 80
          targetPort: 8080
    

    Ingress.yaml

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: spring-k8s
    spec:
      rules:
        - host: spring.k8s.jiangbo
          http:
            paths:
              - pathType: Prefix
                path: "/"
                backend:
                  service:
                    name: spring-k8s
                    port:
                      number: 80
    

    验证

    [root@master ~]# kubectl get svc -n ingress-nginx
    NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    ingress-nginx-controller             NodePort    10.105.218.18   <none>        80:31136/TCP,443:32152/TCP   10d
    ingress-nginx-controller-admission   ClusterIP   10.106.32.133   <none>        443/TCP                      10d
    [root@master ~]# kubectl get pod
    NAME                          READY   STATUS    RESTARTS   AGE
    spring-k8s-79f74b55d7-tjh7c   1/1     Running   2          10d
    [root@master ~]# curl spring.k8s.jiangbo:31136/hostname;echo
    spring-k8s-79f74b55d7-tjh7c
    

    首先找到 Ingress Controller 的 NodePort 端口,然后通过域名和端口访问,就能进入集群。
    再通过配置的 Ingress 路由规则进行转发。

    查看

    [root@master ~]# kubectl describe ing spring-k8s
    Name:             spring-k8s
    Namespace:        default
    Address:          10.105.218.18
    Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
    Rules:
      Host                Path  Backends
      ----                ----  --------
      spring.k8s.jiangbo
                          /   spring-k8s:80 (10.244.2.20:8080)
    Annotations:          <none>
    Events:
      Type    Reason  Age                    From                      Message
      ----    ------  ----                   ----                      -------
      Normal  Sync    2m42s (x2 over 3m36s)  nginx-ingress-controller  Scheduled for sync
    

    总结

    Ingress 除了可以提供 Service 的负载均衡之外,还可以配置域名地址映射。

    附录

  • 相关阅读:
    Windows CE Notification API的使用方法
    探讨如何成为技术团队管理者
    Android应用---基于NDK的samples例程hello-jni学习NDK开发
    在eclipse中配置android ndk的自动编译环境builders
    用javah 导出类的头文件, 常见的错误及正确的使用方法
    Android下NDK开发环境搭建
    Android系统修改硬件设备访问权限
    Android调试工具之ADB
    关于前端小白的一点小建议
    Vue.js简单实践
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/14827901.html
Copyright © 2020-2023  润新知