【问题标题】:How can use static Ip as external-IP at kubernates?如何在 kubernetes 中使用静态 IP 作为外部 IP?
【发布时间】:2019-06-20 11:39:38
【问题描述】:

我想将 external-Ip 设置为静态。我成功地将 ClusterIP 设为静态,但在任何地方都找不到 external_IP 的任何解决方案。

我使用以下部署 yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: null
  generation: 1
  labels:
    run: x-master
  name: x-deployment-master
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      run: x-master
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: x-master
    spec:
      containers:
      - image: gitlab:4567/ecoservers/x-docker:x
        imagePullPolicy: IfNotPresent
        name: x-master
        volumeMounts:
        - name: task-pv-storage
          mountPath: /opt/y/x/home/configutil
        ports:
        - containerPort: 8009
          protocol: TCP
        - containerPort: 8443
          protocol: TCP
        - containerPort: 8445
          protocol: TCP
        - containerPort: 9000
          protocol: TCP
        - containerPort: 7600
          protocol: UDP
        - containerPort: 12001
          protocol: TCP
      volumes:
      - name: task-pv-storage
        hostPath:
          path: /root/configs/configutil_master
          type: Directory
      hostAliases:
      - ip: 10.233.0.13
        hostnames:
        - gessmsatf1
      - ip: 10.233.0.13
        hostnames:
        - gessmsatf2
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    run: x-master
  name: x-service-master
  selfLink: /api/v1/namespaces/default/services/x-service-master
spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: "gui-port"
    protocol: TCP
    port: 8443
    targetPort: 8443
  - name: "service-port"
    protocol: TCP
    port: 8445
    targetPort: 8445
  - name: "cu-port"
    protocol: TCP
    port: 9000
    targetPort: 9000
  - name: "ajp-port"
    protocol: TCP
    port: 8009
    targetPort: 8009
  - name: "cluster-7600"
    protocol: TCP
    port: 7600
    targetPort: 7600
  - name: "cluster-12001"
    protocol: TCP
    port: 12001
    targetPort: 12001
clusterIP: 10.233.0.13
  loadBalancerIP: 10.233.0.13
  selector:
    run: x-master
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 10.233.0.13

实际结果如下:

名称类型 CLUSTER-IP EXTERNAL-IP 端口年龄

x-service-master  LoadBalancer  10.233.0.13   <pending>    8443:30013/TCP   175m

预期结果应该是: 名称 CLUSTER-IP EXTERNAL-IP 端口年龄

helloweb           10.31.254.176   203.0.113.32     80:30690/TCP     54s

【问题讨论】:

    标签: docker kubernetes yaml


    【解决方案1】:

    Kubernetes 本身不提供负载均衡

    Load Balancing on Kubernetes

    当您指定服务定义时,您设置了一种负载均衡器,它实际上由云提供商功能提供(大多数情况下由 VPS 提供商处理。AWS 使用弹性负载均衡器,Azure 使用他们的 TCP 负载均衡器等)。在这些情况下,您很少会同时指定 IP 地址

    如果您在已经提供服务的云提供商上推出了自己的 Kubernetes,那么您最好只使用该服务。如果您在私有数据中心,您将需要部署 metallb,然后将 nat 服务向下部署到它。

    使用 NodePort 作为类型是否可以解决您的问题?

    【讨论】:

      【解决方案2】:

      Kubernetes 不提供任何 IP 作为静态 IP 或外部 IP。如果您使用 AWS、GCP 作为服务,您可以创建服务类型LoadBalancer,这样它将为您提供一个可用作外部 IP 地址的外部 IP。

      您也可以在 kubernetes 中搜索 ingress。这也将有助于将来为您的应用程序和一个 kubernetes 集群内的多个网站设置 SSL 证书。

      https://kubernetes.io/docs/concepts/services-networking/ingress/
      

      【讨论】:

        猜你喜欢
        • 2021-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多