zoukankan      html  css  js  c++  java
  • kubernetes网络介绍

    Kubernetes Services 定义了如何访问一组 Pod 的策略和方法。通过 Service 访问的 Pod 集基于标签选择器。

    Cluster IP 集群 IP

    • Cluster IP 是创建 Kubernetes Service 时的默认方法。该服务被分配了一个内部 IP,其他组件可以使用它来访问 pod。
    • 通过单一的 IP 地址,它可以使服务在多个 Pod 之间进行负载平衡。
    apiVersion: v1
    kind: Service
    metadata:
      name: webapp1-clusterip-svc
      labels:
        app: webapp1-clusterip
    spec:
      ports:
      - port: 80
      selector:
        app: webapp1-clusterip
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: webapp1-clusterip-deployment
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: webapp1-clusterip
        spec:
          containers:
          - name: webapp1-clusterip-pod
            image: katacoda/docker-http-server:latest
            ports:
            - containerPort: 80
    ---
    

    Target Ports 目标端口

    • TargetPort 允许我们将服务可用的端口与应用程序正在侦听的端口分开。
    • TargetPort 是应用程序配置为侦听的端口。端口是从外部访问应用程序的方式。
    apiVersion: v1
    kind: Service
    metadata:
      name: webapp1-clusterip-targetport-svc
      labels:
        app: webapp1-clusterip-targetport
    spec:
      ports:
      - port: 8080
        targetPort: 80
      selector:
        app: webapp1-clusterip-targetport
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: webapp1-clusterip-targetport-deployment
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: webapp1-clusterip-targetport
        spec:
          containers:
          - name: webapp1-clusterip-targetport-pod
            image: katacoda/docker-http-server:latest
            ports:
            - containerPort: 80
    ---
    

    应用程序本身仍然配置为侦听端口 80。Kubernetes 服务管理着两者之间的转换。

    NodePort 目标端口

    • 虽然 TargetPort 和 ClusterIP 使其可用于集群内部,但 NodePort 通过定义的静态端口在每个节点的 IP 上公开服务。
    • 无论访问集群内的哪个节点,根据定义的端口号都可以访问该服务。
    apiVersion: v1
    kind: Service
    metadata:
      name: webapp1-nodeport-svc
      labels:
        app: webapp1-nodeport
    spec:
      type: NodePort
      ports:
      - port: 80
        nodePort: 30080
      selector:
        app: webapp1-nodeport
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: webapp1-nodeport-deployment
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: webapp1-nodeport
        spec:
          containers:
          - name: webapp1-nodeport-pod
            image: katacoda/docker-http-server:latest
            ports:
            - containerPort: 80
    ---
    

    现在可以通过定义的 NodePort 上的节点 IP 地址访问该服务。

    External IPs 外部ip

    • 使服务在集群外可用的另一种方法是通过外部 IP 地址。
    apiVersion: v1
    kind: Service
    metadata:
      name: webapp1-externalip-svc
      labels:
        app: webapp1-externalip
    spec:
      ports:
      - port: 80
      externalIPs:
      - 172.17.0.30
      selector:
        app: webapp1-externalip
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: webapp1-externalip-deployment
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: webapp1-externalip
        spec:
          containers:
          - name: webapp1-externalip-pod
            image: katacoda/docker-http-server:latest
            ports:
            - containerPort: 80
    ---
    

    Load Balancer 负载均衡器

    • 在云中运行时,例如 EC2 或 Azure,可以配置和分配通过云提供商发布的公共 IP 地址。这将通过负载均衡器(例如 ELB)发出。这允许将额外的公共 IP 地址分配给 Kubernetes 集群,而无需直接与云提供商交互。
    apiVersion: v1
    kind: Service
    metadata:
      name: webapp1-loadbalancer-svc
      labels:
        app: webapp1-loadbalancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: webapp1-loadbalancer
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: webapp1-loadbalancer-deployment
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: webapp1-loadbalancer
        spec:
          containers:
          - name: webapp1-loadbalancer-pod
            image: katacoda/docker-http-server:latest
            ports:
            - containerPort: 80
    ---
    
  • 相关阅读:
    如何实现浏览器内多个标签页之间的通信?
    vue组件库的基本开发步骤(源代码)
    vue组件库的基本开发步骤
    Websocket原理
    TCP和UDP的区别
    一句话概括 tcp三次握手
    简单说一下你对http和https的理解
    .Ajax(async异步与sync同步)
    get和post请求方式的区别
    面试易忽略状态码
  • 原文地址:https://www.cnblogs.com/erhao9767/p/14985643.html
Copyright © 2011-2022 走看看