Kubernetes-在configmap中指定externalips

Kubernetes-在configmap中指定externalips,kubernetes,config,Kubernetes,Config,我有一个Kubernetes集群(外部IP:1.2.3.4、2.3.4.5、3.4.5.6) 我想在端口5000上的该群集上托管docker注册表。现在为了实现这一点,我用externalips做了一个测试,它可以工作。这使得nginx在端口85上可用 apiVersion: v1 kind: Service metadata: name: nginx-extip spec: type: ClusterIP ports: - name: http protocol: TC

我有一个Kubernetes集群(外部IP:1.2.3.4、2.3.4.5、3.4.5.6) 我想在端口5000上的该群集上托管docker注册表。现在为了实现这一点,我用externalips做了一个测试,它可以工作。这使得nginx在端口85上可用

apiVersion: v1
kind: Service
metadata:
  name: nginx-extip
spec:
  type: ClusterIP
  ports:
  - name: http
    protocol: TCP
    port: 85
    targetPort: 80
  selector:
    app: nginx-extip
  externalIPs:
  - 1.2.3.4
  - 2.3.4.5
  - 3.4.5.6
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-extip
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-extip
    spec:
      containers:
      - name: nginx-extip-server
        image: nginx
        ports:
        - containerPort: 80
现在,为了重用externalip配置,我想把它放到一个configmap中。因此,所有YAML都可以引用configmap,而不必在外部IP发生更改时手动更新它们。如何将IP阵列放入configmap

我的当前(不工作)配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: externalips
  namespace: default
data:
  externalips:
  - 1.2.3.4
  - 2.3.4.5
  - 3.4.5.6
我得到的错误是:

error: error validating "static-ips-configmap.yml": error validating data: 
ValidationError(ConfigMap.data.externalips): invalid type for
io.k8s.api.core.v1.ConfigMap.data: got "array", expected "string";
if you choose to ignore these errors, turn validation off with --validate=false

如何将这些IP放入configmap?

这里有两个问题:

  • 创建configmap本身时出现语法错误。Config map希望您列出一组文件及其内容,因此正确的语法如下所示:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: externalips
      namespace: default
    data:
      external-ips.list: |
        externalips:
        - 1.2.3.4
        - 2.3.4.5
        - 3.4.5.6
    
  • 我认为不可能引用您创建的用于模板服务规范的configmap。因此,即使您成功地正确创建了configmap,您仍然无法将其作为不同服务定义的一部分重用


  • 您需要一个带外模板系统,用于将这些外部IP添加到服务中。或者,使用入口控制,您必须使用外部IP配置一次,然后使用它多路复用集群内的所有HTTP服务。通过这种方式,您只需管理一项服务的IP。

    ffledgeling的回答是正确的,但我认为“external IPs.list”有点混淆

    这是configmap yaml文件的外观:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: externalips
      namespace: default
    data:
      externalips: |
        ips:
        - 1.2.3.4
        - 2.3.4.5
        - 3.4.5.6
    

    因此,“externalips”、“ips”、“external ips.list”可以是任何东西,因为它们只是键。

    config maps不列出一堆文件及其内容,而是键值对。这些可能是文件和内容,但不一定如此。@p.J.Meisch您在技术上是正确的,但我觉得这样的措辞会导致答案更加混乱。如果你有更好的措辞方式,请随时添加编辑。