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

Installing Istio in Kubernetes with automatic sidecar injection: istio-inializer.yaml Validation Failure

我正在尝试通过自动将边车注入到 Kubernetes 来安装 Istio。我的环境由三个主节点和两个节点组成,并且是使用 Azure 容器服务市场产品在 Azure 上构建的。

按照位于 here, I have so far enabled RBAC and DynamicAdmissionControl. I have accomplished this by modifying /etc/kubernetes/istio-inializer.yaml on the Kubernetes Master by adding the following content outlined in red 的文档,然后使用 Unix 命令 reboot 重新启动 Kubernetes Master。

文档中的下一步是使用 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

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

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

我不确定从这里到哪里去。该问题似乎与 yaml 中的 admissionregistration.k8s.io/v1alpha1 块有关,但我不确定此块中具体有什么不正确的地方。

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 还很陌生,所以如果有人能提供帮助,我将不胜感激。感谢您的时间。

似乎是版本控制问题,因为 k8s 版本> 1.7 支持 alpha 功能,如此处所述 (https://kubernetes.io/docs/admin/extensible-admission-controllers/#what-are-initializers)。

1.7 introduces two alpha features, Initializers and External Admission
Webhooks, that address these limitations. These features allow admission controllers to be developed out-of-tree and configured at runtime.

并且可以将 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。

希望这对您有所帮助 :)