使用自动边车注入在Kubernetes中安装Istio:istio-inializer.yaml验证失败

时间:2017-09-27 17:01:22

标签: azure kubernetes microservices kubectl istio

我试图安装带有自动侧车注入的Istio进入Kubernetes。我的环境由三个主服务器和两个节点组成,并使用Azure容器服务市场产品在Azure上构建。

根据位于here的文档,我到目前为止已启用RBACDynamicAdmissionControl。我通过添加following content outlined in red然后使用Unix命令/etc/kubernetes/istio-inializer.yaml重新启动Kubernetes Master来修改Kubernetes Master上的reboot来完成此操作。

文档中的下一步是使用kubectl应用yaml。我假设文档打算让用户在此步骤之前克隆Istio存储库并cd,但这是未提及的。

git clone https://github.com/istio/istio.git
cd istio
kubectl apply -f install/kubernetes/istio-initializer.yaml

之后发生以下错误:

user@hostname:~/istio$ kubectl apply -f install/kubernetes/istio-initializer.yaml

configmap "istio-inject" configured
serviceaccount "istio-initializer-service-account" configured
error: error validating "install/kubernetes/istio-initializer.yaml": error validating data: found invalid field initializers for v1.ObjectMeta; if you choose to ignore these errors, turn validation off with --validate=false

如果我尝试使用上面提到的标志kubectl apply执行validate=false,则会生成此错误:

user@hostname:~/istio$ kubectl apply -f install/kubernetes/istio-initializer.yaml --validate=false

configmap "istio-inject" configured
serviceaccount "istio-initializer-service-account" configured
deployment "istio-initializer" configured
error: unable to recognize "install/kubernetes/istio-initializer.yaml": no matches for admissionregistration.k8s.io/, Kind=InitializerConfiguration

我不知道从哪里开始。该问题似乎与admissionregistration.k8s.io/v1alpha1中的yaml阻止有关,但我不确定此阻止内容的具体内容是什么。

apiVersion: admissionregistration.k8s.io/v1alpha1
kind: InitializerConfiguration
metadata:
  name: istio-sidecar
initializers:
  - name: sidecar.initializer.istio.io
    rules:
      - apiGroups:
          - "*"
        apiVersions:
          - "*"
        resources:
          - deployments
          - statefulsets
          - jobs
          - daemonsets

Kubernetes的已安装版本:

user@hostname:~/istio$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.6", GitCommit:"7fa1c1756d8bc963f1a389f4a6937dc71f08ada2", GitTreeState:"clean", BuildDate:"2017-06-16T18:21:54Z", GoVersion:"go1.7.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.6", GitCommit:"7fa1c1756d8bc963f1a389f4a6937dc71f08ada2", GitTreeState:"clean", BuildDate:"2017-06-16T18:21:54Z", GoVersion:"go1.7.6", Compiler:"gc", Platform:"linux/amd64"}

我怀疑这是版本不匹配。作为后续问题,是否可以使用ACS将一个版本的kubernetes> = 1.7.4部署到Azure?

我对Kubernetes工作相当新,所以如果有人能提供帮助我会非常感激。感谢您的时间。

1 个答案:

答案 0 :(得分:1)

似乎是版本控制问题,因为k8s版本支持alpha功能>这里提到的1.7(https://kubernetes.io/docs/admin/extensible-admission-controllers/#what-are-initializers)。

  

1.7引入了两个alpha功能,Initializers和External Admission
  Webhooks,解决了这些限制。这些功能允许入场   要在树外开发并在运行时配置的控制器。

可以将一个版本的kubernetes> = 1.7.4部署到Azure。请注意使用门户网站的已部署版本。但是,如果使用acs-egnine生成ARM模板,则可以部署版本为1.7.5的集群。

您可以在此处参考https://github.com/Azure/acs-engine程序。基本上它涉及三个步骤。首先,您应该通过引用clusterDefinition部分来创建json文件。要使用版本1.7.5,您应将属性“orchestratorRelaease”指定为“1.7”,并通过将属性“enableRbac”指定为true来启用RBAC。其次,使用acs引擎(版本> = 0.6.0)将json文件解析为ARM模板(应创建azuredeploy.json& azuredeploy.parameters.json)。最后,使用powershell中的命令“New-AzureRmResourceGroupDeployment”将集群部署到Azure。

希望这有帮助:)