V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
salamanderMH
V2EX  ›  问与答

k8s 定义了 Pod 和 Servive 之后,如何从外部访问服务?

  •  
  •   salamanderMH · 2019-01-13 21:58:04 +08:00 · 2652 次点击
    这是一个创建于 2171 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

    用 Rancher 搭建了 k8s 集群,架构 ,定义了
    Pod

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.0
            ports:
            - containerPort: 80
    

    Service

    kind: Service
    apiVersion: v1
    metadata:
      name: nginx-service
    spec:
      selector:
        app: nginx
      ports:
        - protocol: TCP
          port: 9898
          targetPort: 80
    

    主机都是在阿里云上的,发现 Service 的 ip 也是虚拟的 ip,如何从外部固定入口访问,看网上资料是要定义 ingress

    8 条回复    2019-01-15 15:17:31 +08:00
    hly9469
        1
    hly9469  
       2019-01-13 22:05:46 +08:00 via iPhone
    nodeport
    elons
        2
    elons  
       2019-01-13 22:20:51 +08:00
    通过节点端口访问啊
    a663
        3
    a663  
       2019-01-13 22:30:12 +08:00 via Android
    Ingress
    kidlj
        4
    kidlj  
       2019-01-13 22:36:48 +08:00 via iPhone
    - pod: hostNetwork or hostPort
    - service: NodePort or loadbalancer(公有云环境)
    - ingress
    tinybaby365
        5
    tinybaby365  
       2019-01-13 23:06:23 +08:00
    通过 NodePort 访问,你可以开发一个 Service controller,利用阿里云的 API,支持 LoadBalancer 类型的 Service
    AltairT
        6
    AltairT  
       2019-01-14 00:03:46 +08:00 via iPhone
    service 和负载均衡啊,话说不如直接用阿里云的容器服务,省事很多。日志,监控啥的集成都会很方便。
    salamanderMH
        7
    salamanderMH  
    OP
       2019-01-14 10:59:32 +08:00
    @kidlj
    ingress 的例子是这样
    ```
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: influxdb
    spec:
    rules:
    - host: influxdb.kube.example.com
    http:
    paths:
    - backend:
    serviceName: influxdb
    servicePort: 8086
    ```
    又要定义个 host
    julyclyde
        8
    julyclyde  
       2019-01-15 15:17:31 +08:00
    通过 ingress 是正规途径
    或者 loadbalancer 模式的 service 也可以,但需要一个 loadbalancer plugin

    nodeport 模式(其实 loadbalancer 模式也基于 nodeport )感觉设计上有问题,让所有 node 都开放同一个 port,人为把 port 逼成了紧俏资源
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 23:17 · PVG 07:17 · LAX 15:17 · JFK 18:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.