【问题标题】:Low Port on Kubernetes NodePortKubernetes NodePort 上的低端口
【发布时间】:2020-10-14 17:42:00
【问题描述】:

我的应用程序中有很多 NodePorts 部署在 k8s 上。但是这些端口都在30000以上,因为k8s的限制。我将 kubeadm 与 master 和 worker 一起使用。如何使用低端口外部访问我的服务?

【问题讨论】:

    标签: kubernetes kubeadm service-node-port-range


    【解决方案1】:

    对于生产集群,您应该使用入口控制器而不是 NodePorts 来修改默认端口范围,即 (30000 - 32767)。您需要修改位于 /etc/kubernetes/manifests/kube-apiserver.yaml pod 中的 apiserver,添加标志 --service-cluster-ip-range

    例如:

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      creationTimestamp: null
      labels:
        component: kube-apiserver
        tier: control-plane
      name: kube-apiserver
      namespace: kube-system
    spec:
      containers:
      - command:
        - kube-apiserver
        - --authorization-mode=Node,RBAC
        - --advertise-address=192.168.252.65
        - --allow-privileged=true
        - --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
        - --service-node-port-range=20000-22767
        - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
        - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
        image: k8s.gcr.io/kube-apiserver:v1.13.3
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 8
          httpGet:
            host: 192.168.252.65
            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/ca-certificates
          name: etc-ca-certificates
          readOnly: true
        - mountPath: /etc/kubernetes/pki
          name: k8s-certs
          readOnly: true
        - mountPath: /usr/local/share/ca-certificates
          name: usr-local-share-ca-certificates
          readOnly: true
        - mountPath: /usr/share/ca-certificates
          name: usr-share-ca-certificates
          readOnly: true
      hostNetwork: true
      priorityClassName: system-cluster-critical
      volumes:
      - hostPath:
          path: /etc/ssl/certs
          type: DirectoryOrCreate
        name: ca-certs
      - hostPath:
          path: /etc/ca-certificates
          type: DirectoryOrCreate
        name: etc-ca-certificates
      - hostPath:
          path: /etc/kubernetes/pki
          type: DirectoryOrCreate
        name: k8s-certs
      - hostPath:
          path: /usr/local/share/ca-certificates
          type: DirectoryOrCreate
        name: usr-local-share-ca-certificates
      - hostPath:
          path: /usr/share/ca-certificates
          type: DirectoryOrCreate
        name: usr-share-ca-certificates
    status: {}
    

    【讨论】:

    • 谢谢。那么我应该使用入口控制器修改 --service-cluster-ip-range 吗?
    • 不,入口控制器是一个不使用 NodePort 的控制器,它是一个不同的主题,要让它工作你必须安装控制器然后创建入口对象,它不会使用 NodePorts,但是不同的 ips 或主机取决于您的选择。
    • 好的。我得到了它。使用 NodePort 的解决方案是 --service-cluster-ip-range ok?
    • 是的,但是就像示例中一样,它必须在 apiserver pod 中完成,我不知道您是否可以访问或您拥有什么样的集群
    • 是的,我可以访问。但是我在某处读到,更改此端口范围不是一个好习惯,因为我们可能与某些守护进程有冲突的端口。是真的吗?
    猜你喜欢
    • 2017-10-11
    • 2021-12-10
    • 1970-01-01
    • 2021-10-20
    • 2020-06-09
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多