我有一个Kubernetes集群(外部ips: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中。所以所有的yamls都可以引用configmap,我们不必在更改时手动更新它们。如何将一组ips放入configmap?
我当前(不工作)的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放入配置图?
答案 0 :(得分:2)
这里有两个问题:
创建configmap本身时出现语法错误。配置映射要求您列出一堆文件及其内容,因此正确的语法如下所示:
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
我不认为可以引用您为模板化服务规范创建的配置图。因此,即使您设法正确创建了配置图,您仍然无法将其作为不同服务定义的一部分重用。
您需要一个带外模板系统,您可以使用该系统将这些外部IP添加到服务中。或者,使用入口控件,您必须使用外部IP 配置一次,然后使用它来复用集群内的所有HTTP服务。这样,您无论如何都只管理一项服务的IP。
答案 1 :(得分:2)
ffledgling的回答是正确的,但我认为“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”可以是任何东西,因为它们只是键。