如何在Ignite XML配置中为Kubernetes IPFinder设置MasterUrl

时间:2018-03-20 22:56:49

标签: kubernetes ignite

将测试配置与Ignite 2.4和k8s 1.9:

一起使用
<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd">

    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
      <property name="discoverySpi">
        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
          <property name="ipFinder">
            <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder"/>
          </property>
        </bean>
      </property>
    </bean>
</beans>

无法在https://kubernetes.default.svc.cluster.local:443找到Kubernetes API服务器 我可以在XML配置文件中设置API服务器URL吗?怎么样?

5 个答案:

答案 0 :(得分:6)

@Denis是对的。

Kubernetes使用RBAC访问控制系统,您需要授权您的pod访问API。

为此,您需要在您的广告连播中添加Service Account

所以,为此你需要:

  1. 创建服务帐户并为其设置角色:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ignite
      namespace: <Your namespace>
    
  2. 我不确定只访问pod的权限对于Ignite来说是否足够,但如果没有 - 您可以根据需要添加更多权限。 Here是具有大量权限列表的不同类型角色的示例。所以,现在我们为您的应用创建群集角色:

    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRole
    metadata:
      name: ignite
      namespace: <Your namespace>
    rules:
    - apiGroups:
      - ""
      resources:
      - pods # Here is resources you can access
      verbs: # That is what you can do with them
      - get
      - list
      - watch
    
  3. 为该角色创建绑定:

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: ignite
    roleRef:
      kind: ClusterRole
      name: ignite
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      name: ignite
      namespace: <Your namespace>
    
  4. 现在,您需要将ServiceAccount与您的应用程序关联:

    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      ....
    spec:
      template:
        spec:
          serviceAccountName: ignite
    
  5. 之后,您的应用程序将可以访问K8s API。附:不要忘记将<Your namespace>更改为运行Ignition的命名空间。

答案 1 :(得分:4)

答案 2 :(得分:1)

答案 3 :(得分:1)

经过测试的版本:

Kubernetes:v1.8

点燃:v2.4

这将更加宽容。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: ignite-rbac
subjects:
  - kind: ServiceAccount
    name: default
    namespace: <namespace>
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

答案 4 :(得分:0)

如果您遭到403的未经授权,那么使您的资源使用的服务帐户可能没有足够的权限。在确保您的名称空间和服务帐户以及部署/副本集完全符合您的要求之后,应该更新权限。

此链接对于设置服务帐户的权限非常有用: https://kubernetes.io/docs/reference/access-authn-authz/rbac/#service-account-permissions