精华内容
下载资源
问答
  • Kubernetes Service NodePort 外网访问

    千次阅读 2020-10-09 12:41:40
    除了 Cluster 内部可以访问 Service,很多情况我们也希望应用的 Service 能够暴露给 Cluster 外部。Kubernetes 提供了多种...NodePort Service 通过 Cluster 节点的静态端口对外提供服务。Cluster 外部可以通过&l...

     

    Service类型


    NodePort:在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定内部集群IP地址。

    访问地址:<任意NodeIP>:<NodePort>
    端口范围:30000-32767

    除了 Cluster 内部可以访问 Service,很多情况我们也希望应用的 Service 能够暴露给 Cluster 外部。Kubernetes 提供了多种类型的 Service,默认是 ClusterIP。

    ClusterIP 
    Service 通过 Cluster 内部的 IP 对外提供服务,只有 Cluster 内的节点和 Pod 可访问,这是默认的 Service 类型。

    NodePort 
    Service 通过 Cluster 节点的静态端口对外提供服务。Cluster 外部可以通过 <NodeIP>:<NodePort> 访问 Service。

    LoadBalancer:与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾讯云、AWS等)上的负载均衡器,将每个Node ([NodeIP]:[NodePort])作为后端添加进去

     

    创建测试pod


    [root@k8s-master service]# cat pod-nodeport.yml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: pod-nodeport
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: luksa/kubia
            ports:
            - containerPort: 8080
    [root@k8s-master service]# kubectl get pod -n default -l app=myapp -o wide
    NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
    pod-nodeport-6cc49c7999-5fjdh   1/1     Running   0          13m   10.244.2.14   k8s-node2    <none>           <none>
    pod-nodeport-6cc49c7999-gdqbg   1/1     Running   0          13m   10.244.0.23   k8s-master   <none>           <none>

    添加 type: NodePort。 

    [root@k8s-master service]# cat service.yml 
    apiVersion: v1
    kind: Service
    metadata: 
      name: nodeport-svc
    spec:
      type: NodePort
      selector:
        app: myapp
      ports:
      - protocol: TCP
        port: 3000
        targetPort: 8080
        nodePort: 30090
    
    # 现在配置文件中就有三个 Port 了:(NodePort默认是的随机选择,不过我们可以用nodePort指定某个特定端口)
    nodePort 是节点上监听的端口
    port 是 ClusterIP 上监听的端口
    targetPort 是 Pod 监听的端口
    [root@k8s-master ~]# kubectl get svc
    NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP          40d
    nodeport-svc   NodePort    10.105.182.209   <none>        3000:30090/TCP   27m

    Kubernetes 依然会为 httpd-svc 分配一个 ClusterIP,不同的是:

    1. EXTERNAL-IP 为 nodes,表示可通过 Cluster 每个节点自身的 IP 访问 Service。

    2. PORT(S) 为 3000:30090。3000是 ClusterIP 监听的端口,30090 则是节点上监听的端口。Kubernetes 会从 30000-32767 中分配一个可用的端口,每个节点都会监听此端口并将请求转发给 Service。

    [root@k8s-master service]# netstat -tpln | grep 30090
    tcp        0      0 0.0.0.0:30090           0.0.0.0:*               LISTEN      34081/kube-proxy    
    [root@k8s-node1 ~]# netstat -tpln | grep 30090
    tcp        0      0 0.0.0.0:30090           0.0.0.0:*               LISTEN      32625/kube-proxy    
    [root@k8s-node2 ~]# netstat -tpln | grep 30090
    tcp        0      0 0.0.0.0:30090           0.0.0.0:*               LISTEN      14369/kube-proxy    

     下面测试 NodePort 是否正常工作。

    [root@k8s-master service]# curl 192.168.179.99:30090 
    You've hit pod-nodeport-6cc49c7999-gdqbg
    [root@k8s-master service]# curl 192.168.179.100:30090 
    You've hit pod-nodeport-6cc49c7999-gdqbg
    [root@k8s-master service]# curl 192.168.179.101:30090 
    You've hit pod-service-7f68854988-5fjdh

    通过三个节点 IP + 30090 端口都能够访问 httpd-svc

    接下来我们深入探讨一个问题:Kubernetes 是如何将 <NodeIP>:<NodePort> 映射到 Pod 的呢?

    与 ClusterIP 一样,也是借助了 iptables。与 ClusterIP 相比,每个节点的 iptables 中都增加了下面两条规则:

    [root@k8s-master service]# iptables-save | grep 30090
    -A KUBE-NODEPORTS -p tcp -m comment --comment "default/nodeport-svc:" -m tcp --dport 30090 -j KUBE-MARK-MASQ
    -A KUBE-NODEPORTS -p tcp -m comment --comment "default/nodeport-svc:" -m tcp --dport 30090 -j KUBE-SVC-GFPAJ7EGCNM4QF4H

    规则的含义是:访问当前节点 30090 端口的请求会应用规则KUBE-SVC-GFPAJ7EGCNM4QF4H,内容为:

    [root@k8s-master service]# iptables-save | grep KUBE-SVC-GFPAJ7EGCNM4QF4H
    -A KUBE-SVC-GFPAJ7EGCNM4QF4H -m comment --comment "default/nodeport-svc:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-TWG53VPX4RADGFC6
    -A KUBE-SVC-GFPAJ7EGCNM4QF4H -m comment --comment "default/nodeport-svc:" -j KUBE-SEP-YUA4WPOUSEKJIAM2

    其作用就是负载均衡到每一个 Pod。 最终,Node 和 ClusterIP 在各自端口上接收到的请求都会通过 iptables 转发到 Pod 的 targetPort

     

    CoreDns解析


    [root@k8s-master ~]# kubectl exec -it dns-test -- sh
    / # nslookup nodeport-svc
    Server:    10.96.0.10
    Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
    
    Name:      nodeport-svc
    Address 1: 10.105.182.209 nodeport-svc.default.svc.cluster.local
    / # 

     

    NodePort前端负载均衡器


    NodePort:会在每台Node上监听端口接收用户流量,在实际情况下,对用户暴露的只会有一个IP和端口,那这么多台Node该使用哪台让用户访问呢?这时就需要前面加一个公网负载均衡器为项目提供统一访问入口了。

    一般在搭建k8s集群都是放在内网当中,也就是不暴露在公网上,即使你使用了nodeport暴露了端口,但是在公网上还是访问不到的。所以必须提供公网的ip。

    一般在前面加上负载均衡器来为负载均衡器提供统一的访问入口,使用负载均衡器反向代理到后面指定的端口。

    一个项目对应一个service,一个service与nodeport对应。

    通过nginx的虚拟主机基于域名进行分流,转发到不同的端口

    upstream demo {
    	server 192.168.179.103:31964;
    	server 192.168.179.104:31964;
    }
    
    upstream demo2 {
    	server 192.168.179.103:31965;
    	server 192.168.179.104:31965;
    }
    
    upstream demo3 {
    	server 192.168.179.103:31966;
    	server 192.168.179.104:31966;
    }
    
    server {
    	server_name a.xxx.com;
    	location / {
    		proxy_pass http://demo;
    	}
    }
    
    server {
    	server_name b.xxx.com;
    	location / {
    		proxy_pass http://demo2;
    	}
    }
    
    server {
    	server_name c.xxx.com;
    	location / {
    		proxy_pass http://demo3;
    	}
    }

    如果你还要加项目就是加上面配置就行,基于域名进行分流转发到不同的pod上面

     

     

    LoadBalancer


    在公有云会更加方便一些

    LoadBalancer:与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾讯云、AWS等)上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。

     

    也即是你在集群里面创建service类型为loadblance,并且部署了支持云上的控制器,就会自动的获取端口和所有节点的IP,并且自动的加入后端。相当于上面nginx操作一样。这样就省事了,不需要手动添加了。

    展开全文
  • NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 :,可以从集群的外部访问一个 NodePort 服务。 3、 LoadBalancer :需要外部支持(GCP and Azure),用户访问service.spec....

    Service官网https://kubernetes.io/docs/concepts/services-networking/service/

    An abstract way to expose an application running on a set of Pods as a network service.
    With Kubernetes you don’t need to modify your application to use an unfamiliar service discovery mechanism. Kubernetes gives Pods their own IP addresses and a single DNS name for a set of Pods, and can load-balance across them.
    

    1 Service 类型

    在定义Service的时候可以指定一个自己需要的类型的Service,如果不指定的话默认是ClusterIP类型。

    可以使用的服务类型如下:

    1、ClusterIP:通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的Service类型。ClusterIP类型的service创建时,k8s会通过etcd从可分配的IP池中分配一个IP,该IP全局唯一,且不可修改。所有访问该IP的请求,都会被iptables转发到后端的endpoints中。

    2、NodePort:通过每个 Node 节点上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 :,可以从集群的外部访问一个 NodePort 服务。

    3、LoadBalancer:需要外部支持(GCP and Azure),用户访问service.spec.external-ip,该IP对应到一个外部负载均衡的vip,外部服务对这个vip的请求,会被loadbalancer通过健康检查和转发,发送到一个运行着该服务pod的node上,并同样通过nodePort里的端口映射,发送给容器。

    4、ExternalName:用户可以指定一个任意的名字,作为该service被解析的CNAME,这种类型的servcie不用指定clusterIP,因此kube-proxy不会管理这类service,这类service需要使用1.7版本以上的kubedns。

    2 Cluster IP

    (1)创建whoami-deployment.yaml文件

    vim whoami-deployment.yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: whoami-deployment
      labels:
        app: whoami
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: whoami
      template:
        metadata:
          labels:
            app: whoami
        spec:
          containers:
          - name: whoami
            image: jwilder/whoami
            ports:
            - containerPort: 8000
    

    (2)运行yaml文件并查看pod以及service

    [root@henry001 network]# kubectl apply -f whoami-deployment.yaml 
    deployment.apps/whoami-deployment created
    
    `查看生成的pod详细信息`
    [root@henry001 network]# kubectl get pods -o wide
    NAME                                 READY   STATUS    RESTARTS   AGE     IP                NODE       NOMINATED NODE   READINESS GATES
    whoami-deployment-678b64444d-lgvck   1/1     Running   0          28s     192.168.254.207   henry003   <none>           <none>
    whoami-deployment-678b64444d-mszwp   1/1     Running   0          28s     192.168.217.18    henry002   <none>           <none>
    whoami-deployment-678b64444d-xz66k   1/1     Running   0          28s     192.168.254.208   henry003   <none>           <none>
    
    `查看service,此时并未有whoami相关的service`
    [root@henry001 network]# kubectl get svc
    NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   23h
    

    (3)在集群内正常访问

    curl 192.168.254.207:8000
    curl 192.168.217.18:8000
    curl 192.168.254.208:8000
    

    (4)创建whoami的service

    注意:该地址只能在集群内部访问

    `为deployment的whoami-deployment创建service`
    [root@henry001 network]# kubectl expose deployment whoami-deployment
    service/whoami-deployment exposed
    
    `查看service`
    [root@henry001 network]# kubectl get svc
    NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    kubernetes          ClusterIP   10.96.0.1       <none>        443/TCP    24h
    whoami-deployment   ClusterIP   10.97.233.149   <none>        8000/TCP   12s
    
    

    **可以发现有一个Cluster IP类型的service,名称为whoami-deployment,IP地址为10.97.233.149

    (5)通过Service的Cluster IP访问

    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-xz66k
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-lgvck
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-mszwp
    

    (6)具体查看一下whoami-deployment的详情信息,发现有一个Endpoints连接了具体3个Pod

    [root@henry001 network]# kubectl describe svc whoami-deployment
    Name:              whoami-deployment
    Namespace:         default
    Labels:            app=whoami
    Annotations:       <none>
    Selector:          app=whoami
    Type:              ClusterIP
    IP:                10.97.233.149
    Port:              <unset>  8000/TCP
    TargetPort:        8000/TCP
    Endpoints:         192.168.217.18:8000,192.168.254.207:8000,192.168.254.208:8000
    Session Affinity:  None
    Events:            <none>
    

    (7)下面通过deployment对whoami扩容成5个

    kubectl scale deployment whoami-deployment --replicas=5
    
    `查看pod,已经扩容为5个`
    [root@henry001 network]# kubectl get pods
    NAME                                 READY   STATUS    RESTARTS   AGE     IP                NODE       NOMINATED NODE   READINESS GATES
    whoami-deployment-678b64444d-lgvck   1/1     Running   0          23m     192.168.254.207   henry003   <none>           <none>
    whoami-deployment-678b64444d-mszwp   1/1     Running   0          23m     192.168.217.18    henry002   <none>           <none>
    whoami-deployment-678b64444d-q4wzx   1/1     Running   0          4m50s   192.168.254.209   henry003   <none>           <none>
    whoami-deployment-678b64444d-xz66k   1/1     Running   0          23m     192.168.254.208   henry003   <none>           <none>
    whoami-deployment-678b64444d-zj82s   1/1     Running   0          4m50s   192.168.217.19    henry002   <none>           <none>
    
    
    

    (8)再次访问:curl 10.97.233.149:8000

    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-mszwp
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-xz66k
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-q4wzx
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-zj82s
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-xz66k
    [root@henry001 network]# curl 10.97.233.149:8000
    I'm whoami-deployment-678b64444d-lgvck
    

    (9)再次查看service具体信息:kubectl describe svc whoami-deployment

    [root@henry001 network]# kubectl describe svc whoami-deployment
    Name:              whoami-deployment
    Namespace:         default
    Labels:            app=whoami
    Annotations:       <none>
    Selector:          app=whoami
    Type:              ClusterIP
    IP:                10.97.233.149
    Port:              <unset>  8000/TCP
    TargetPort:        8000/TCP
    Endpoints:         192.168.217.18:8000,192.168.217.19:8000,192.168.254.207:8000 + 2 more...    #这里有5个pod的信息
    Session Affinity:  None
    Events:            <none>
    
    

    (10)其实对于Service的创建,不仅仅可以使用kubectl expose,也可以定义一个yaml文件

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
      type: Cluster
    

    总结:其实Service存在的意义就是为了Pod的不稳定性,而上述探讨的就是关于Service的一种类型Cluster IP,只能供集群内访问。

    3 NodePort

    因为外部能够访问到集群的物理机器IP,所以就是在集群中每台物理机器上暴露一个相同的IP,从给定的配置范围内(默认:30000-32767)分配端口

    (1)根据whoami-deployment.yaml创建pod

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: whoami-deployment
      labels:
        app: whoami
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: whoami
      template:
        metadata:
          labels:
            app: whoami
        spec:
          containers:
          - name: whoami
            image: jwilder/whoami
            ports:
            - containerPort: 8000
    

    (2)创建NodePort类型的service,名称为whoami-deployment

    `查看service`
    [root@henry001 network]# kubectl get svc
    NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    kubernetes          ClusterIP   10.96.0.1       <none>        443/TCP    41h
    whoami-deployment   ClusterIP   10.97.233.149   <none>        8000/TCP   17h
    
    `删除ClusterIP类型的service`
    [root@henry001 network]# kubectl delete svc whoami-deployment
    service "whoami-deployment" deleted
    
    `创建NodePort类型的service`
    [root@henry001 network]# kubectl expose deployment whoami-deployment --type=NodePort
    service/whoami-deployment exposed
    [root@henry001 network]# kubectl get svc
    NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    kubernetes          ClusterIP   10.96.0.1       <none>        443/TCP          41h
    whoami-deployment   NodePort    10.103.129.91   <none>        8000:31999/TCP   3s
    
    

    (3)注意上述的端口31999,实际上就是暴露在集群中物理机器上的端口

    `在每台机器上查看一下31999端口监听情况`
    [root@henry001 network]# lsof -i tcp:31999
    COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    kube-prox 11693 root   11u  IPv6 15525671      0t0  TCP *:31999 (LISTEN)
    [root@henry001 network]# netstat -nlp |grep 31999
    tcp6       0      0 :::31999                :::*                    LISTEN      11693/kube-proxy
    

    (4)浏览器通过物理机器的IP访问

    • 用service访问的时候端口号为8000;
    • 使用内网Ip或者外网Ip访问时需要用端口号31999
    `master节点`
    [root@henry001 network]# curl 192.168.0.8:31999
    I'm whoami-deployment-678b64444d-q9mzt
    [root@henry001 network]# curl 10.103.129.91:8000
    I'm whoami-deployment-678b64444d-q9mzt
    
    `henry002节点`
    [root@henry002 ~]# curl 10.103.129.91:8000
    I'm whoami-deployment-678b64444d-89dzd
    [root@henry002 ~]# curl 192.168.0.8:31999
    I'm whoami-deployment-678b64444d-q9mzt
    
    `henry003节点`
    [root@henry003 ~]# curl 10.103.129.91:8000
    I'm whoami-deployment-678b64444d-d7w64
    [root@henry003 ~]# curl 192.168.0.7:31999
    I'm whoami-deployment-678b64444d-89dzd
    
    `集群外机器`
    [root@w1 ~]# curl 182.92.168.144:31999
    I'm whoami-deployment-678b64444d-d7w64
    
    
    • 使用浏览器访问:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EWWoqH4P-1578305810097)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200102154935787.png)]

    总结:NodePort虽然能够实现外部访问Pod的需求,但这种方法有许多缺点:

    1. 每个端口只能是一种服务
    2. 端口范围只能是 30000-32767
    3. 如果节点/VM 的 IP 地址发生变化,你需要能处理这种情况

    基于以上原因,我不建议在生产环境上用这种方式暴露服务。如果你运行的服务不要求一直可用,或者对成本比较敏感,你可以使用这种方法。这样的应用的最佳例子是 demo 应用,或者某些临时应用。

    因篇幅太长分为两章来写。

    展开全文
  • 问题描述 k8s搭建完成后,我在本机访问本机的nodeport会很慢,而通过其他主机会很快,如下图 下面是直接访问后端节点,也很快,shit~ 跨节点访问,也很快,就是自己访问自己很慢。ohshit 解决的过程 pod中并没有异常...

    问题描述

    k8s搭建完成后,我在本机访问本机的nodeport会很慢,而通过其他主机会很快,如下图
    在这里插入图片描述
    在这里插入图片描述
    下面是直接访问后端节点,也很快,shit~
    在这里插入图片描述
    跨节点访问,也很快,就是自己访问自己很慢。ohshit
    在这里插入图片描述

    解决的过程

    • pod中并没有异常日志
    • 服务器的dmesg、message也没有异常
    • 使用strace 跟踪了一下,发现了连接超时
      在这里插入图片描述
    • 既然是连接超时,那就抓包看一下情况
      自己发往自己的包
      在这里插入图片描述

    发现很多的 incorrect …

    自己发起的包
    在这里插入图片描述

    发现很多的 incorrect …

    百度搜索了一下 incorrect cksum

    后面有时间补充知识点,下面直接说解决办法

    # 关闭 网卡和flannel的 offload
    ethtool -K eth0 rx off tx off sg off tso off    
    ethtool -K flannel.1 rx off tx off sg off tso off    
    

    然后测试自己访问自己,很快了。

    集群中有台物理机在没关offload的情况下,自己访问自己就很快。 但是虚机就不行。这一点我没找到原因。

    展开全文
  • Kubernetes 调整 nodePort 端口范围

    千次阅读 2019-08-15 21:19:15
    默认情况下,k8s 集群 nodePort 分配的端口范围为:30000-32767,如果我们指定的端口不在这个范围就会报类似下面这样的错误: Error: release kong failed: Service “kong-kong-admin” is invalid: spec.ports[0]...

    默认情况下,k8s 集群 nodePort 分配的端口范围为:30000-32767,如果我们指定的端口不在这个范围就会报类似下面这样的错误:

    Error: release kong failed: Service “kong-kong-admin” is invalid: spec.ports[0].nodePort: Invalid value: 8444: provided port is not in the valid range. The range of valid ports is 30000-32767

    解决方法就是调整 kube-apiserver 组件启动参数,指定 nodePort 范围。如果是用 kubeadm 安装的集群,那么 apiserver 是以静态 pod 的形式运行,pod 文件定义在 /etc/kubernetes/manifests/kube-apiserver.yaml。/etc/kubernetes/manifests 目录下是所有静态 pod 文件的定义,kubelet 会监控该目录下文件的变动,只要发生变化,pod 就会重建,响应相应的改动。所以我们修改 /etc/kubernetes/manifests/kube-apiserver.yaml 文件,添加 nodePort 范围参数后会自动生效,无需进行其他操作:
    vim /etc/kubernetes/manifests/kube-apiserver.yaml
    在 command 下添加 --service-node-port-range=1-65535 参数,修改后会自动生效,无需其他操作:

    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        component: kube-apiserver
        tier: control-plane
      name: kube-apiserver
      namespace: kube-system
    spec:
      containers:
      - command:
        - kube-apiserver
        - --service-node-port-range=1-65535
        - --advertise-address=192.168.26.10
        - --allow-privileged=true
        - --authorization-mode=Node,RBAC
        - --client-ca-file=/etc/kubernetes/pki/ca.crt
        - --enable-admission-plugins=NodeRestriction
        - --enable-bootstrap-token-auth=true
        - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
        - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
        - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
        - --etcd-servers=https://127.0.0.1:2379
        - --insecure-port=0
        - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
        - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
        - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
        - --requestheader-allowed-names=front-proxy-client
        - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
        - --requestheader-extra-headers-prefix=X-Remote-Extra-
        - --requestheader-group-headers=X-Remote-Group
        - --requestheader-username-headers=X-Remote-User
        - --secure-port=6443
        - --service-account-key-file=/etc/kubernetes/pki/sa.pub
        - --service-cluster-ip-range=10.96.0.0/12
        - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
        - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
        image: registry.aliyuncs.com/google_containers/kube-apiserver:v1.15.2
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 8
          httpGet:
            host: 192.168.26.10
            path: /healthz
            port: 6443
            scheme: HTTPS
          initialDelaySeconds: 15
          timeoutSeconds: 15
        name: kube-apiserver
        resources:
          requests:
            cpu: 250m
        volumeMounts:
        - mountPath: /etc/ssl/certs
          name: ca-certs
          readOnly: true
        - mountPath: /etc/pki
          name: etc-pki
          readOnly: true
        - mountPath: /etc/kubernetes/pki
          name: k8s-certs
          readOnly: true
      hostNetwork: true
      priorityClassName: system-cluster-critical
      volumes:
      - hostPath:
          path: /etc/ssl/certs
          type: DirectoryOrCreate
        name: ca-certs
      - hostPath:
          path: /etc/pki
          type: DirectoryOrCreate
        name: etc-pki
      - hostPath:
          path: /etc/kubernetes/pki
          type: DirectoryOrCreate
        name: k8s-certs
    status: {}
    

    相关文档:
    http://www.thinkcode.se/blog/2019/02/20/kubernetes-service-node-port-range

    展开全文
  • K8s的Service发布主要有3种type,type=ClusterIP,表示仅内部可访问服务,type=NodePort,表示通过NodePort对外暴露服务,type=LoadBalancer,表示通过LoadBalancer对外暴露服务(底层对接NodePort,一般公有云才支持...
  • 今天早上发现,k8s其中有一个服务映射的 nodePort ,在k8s集群外的同内网服务器中,两次连接该服务时,一次可连接,一次不能连接,即50%的几率可以正常连接,使用telnet测试如下: // 可正常连接 # telnet 192.168....
  • 外部通信-NodePort

    千次阅读 2019-10-18 09:23:05
    如何从外部网络访问 Kubernetes的Pod IP和Cluster IP都只能在集群内部...NodePort在集群中的主机节点上为Service提供一个代理端口,以允许从主机网络上对Service进行访问。Kubernetes官网文档只介绍了NodePort的功...
  • K8s简述NodePort

    万次阅读 2020-07-03 23:30:35
    由于都是在K8s集群内部进行Docker通信的,就遇到了如何暴露服务给外界访问的问题,生产环境比较好的方案就是借助云服务商使用LoadBalancer的方式,但由于是测试环境就使用了比较简单的NodePort来暴露服务,在实践...
  • Kubernetes发布规范与常用命令POD发布规范及YAML文件POD发布命令POD端口转发(仅适用于调试)NodePort Service路由发布发布服务命令 查找最新发布规范样例,可以在官方文档中找到。K8S API Reference POD发布规范及...
  • K8s中nodePort、port、targetPort、hostPort介绍 1、nodePort 外部流量访问k8s集群中service入口的一种方式(另一种方式是LoadBalancer),即nodeIP:nodePort是提供给外部流量访问k8s集群中service的入口。比如外部...
  • 在OpenShift中,通常我们是根据Service生成Route对象来为外部客户端提供一个访问...这种方式的实现机制如下图,当为Service定义了nodePort后,Openshift会在每个对应Node打开nodePort端口(如下图30001),这样当客...
  • nodePort的使用

    2020-05-11 18:39:47
    nodePort只在有pod的机器上才能访问 安装ingress controller需要在被外部访问的节点都要安装。 真正在云中使用的时候需要一个load balance连接边缘节点(endpoints)
  • nodePort提供了集群外部客户端访问service的一种方式,:nodePort提供了集群外部客户端访问service的端口,即nodeIP:nodePort提供了外部流量访问k8s集群中service的入口。 比如外部用户要访问k8s集群中的一个Web应用...
  • 就像第一章所说的,类似Graph中维护了一个Node的链表,在Node中也维护了一个NodePort也就是Node的接口的链表,所以在介绍Node之前,我们先要来介绍NodePort这个类 我们直接来看源码: [Serializable] public ...
  • Kubernetes的三种外部访问方式:NodePort、LoadBalancer 和 Ingress http://dockone.io/article/4884 通过NodePort向k8s集群外部暴露服务 https://www.jianshu.com/p/ce1028c1cbc0 【编者的话】本文分析了 Node...
  • K8s之NodePort LoadBalancer和Ingress的区别

    千次阅读 2019-10-24 17:29:59
    NodePort,正如这个名字所示,在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。 NodePort服务的yaml文件类似如下 apiVersion: v1 kind: Service metadata: name: my-node...
  • Kubernetes的Service外部访问方式:NodePort和LoadBalancer

    万次阅读 热门讨论 2019-02-05 02:14:42
    Kubernetes的Service外部访问方式:NodePort和LoadBalancer Kubernetes的Pod的寿命是有限的,它们不会复活,因此尽管每个Pod都有自己的IP地址,但是这些IP地址是不可靠的,会随着Pod的消亡而消失。 这就带来一个...
  • K8S NodePort无法访问MySQL

    千次阅读 2020-02-21 18:07:12
    3. NodePort无法访问Mysql 3.1 起因测试一个MySQL。纯粹测试,不要纠结 编辑一个mysql-rc.yaml apiVersion : v1 kind : ReplicationController metadata : name : mysql - rc spec : replicas : ...
  • 一个mater节点,两个node节点。我部署了一个应用,副本数是3个,所以有3个pod。问题就是我用postman去访问的时候(master节点ip:映射出来的port/xxxxxxxxxxxxx),访问不通,本地telnet的时候无响应。 但是我进到...
  • 解决办法 设置net.ipv4.ip_forward=1参数: #!/bin/sh cat > /etc/sysctl.d/99-ipv4_forward.conf <<EOF net.ipv4.ip_forward=1 EOF sysctl --load=/etc/sysctl.d/99-ipv4_forward.conf
  • K8s获取NodePort

    千次阅读 2018-09-04 15:12:05
    K8s获取NodePort (金庆的专栏 2018.9) 将服务用NodePort暴露到外网,为避免端口冲突,不指定NodePort, 而是让k8s自动选择一个端口。 $ cat get_node_port.yaml kind: Service apiVersion: v1 metadata: name...
  • 通常由于iptables问题和selinux问题 解决方式 setenforce 0 iptables --flush iptables -tnat --flush service docker restart iptables -P FORWARD ACCEPT ...Disabling SELinux by running setenforce 0 is ...
  • 1.创建Services的方法: 1).kubectl expoese命令,会给我们...2).service主要有三种类型:一种叫clusterIP,一种叫nodePort,一种叫外部的LoadBalancer l ClusterIP: 仅仅使用一个集群内部的IP地址 - 这是默认值。...
  • K8S使用NodePort类型Service

    千次阅读 2020-12-08 14:26:57
    1.1、第一种类型创建:直接在yaml中标记是nodePort apiVersion: v1 kind: Service metadata: name: nginx-service-nodeport spec: selector: app: nginx ports: - name: http port: 8000 protocol: TCP ...
  • 现象">现象 集群3个节点,通过istio-ingressgateway暴露了一个nodeport类型的31400端口。对于nodeport类型的端口,理论上可以通过任
  • (1)找到pod所在节点,从pod所在k8s节点上通过{nodeIp}:{nodePort}访问,如果访问不了,可能是pod或service没有成功部署; (2)从其它node节点通过{nodeIp}:{nodePort}访问,如果不能访问,执行 kubectl ...
  • K8s nodePort、port、targetPort、hostPort

    千次阅读 2020-03-16 16:22:17
    1. nodePort 外部流量访问k8s集群中service入口的一种方式(另一种方式是LoadBalancer),即nodeIP:nodePort是提供给外部流量访问k8s集群中service的入口。比如外部用户要访问k8s集群中的一个Web应用,那么我们可以...
  • nodePort: 31111 //node的真实端口号 11 selector: 12 app: myweb //Service选择了标签为app: myweb的pod 13 type : NodePort 1 2 3 4 5 6 7 8 9 10 11 12 13 重点在于三个端口的区别,容器有端口...
  • kubernets nodeport 无法访问

    万次阅读 2018-03-25 15:24:48
    Environment Os: centos7.1 Kubelet: 1.6.7 Docker: 17.06-ce Calico: 2.3 ...现有 service A, 为了能使外部访问,故将 service type 设为NodePort。端口为 31246。 A 所对应的 pod 运行在 no...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,939
精华内容 92,375
关键字:

NodePort